Перейти к содержанию
    

В настоящее время (впрочем как и многие начинающие) использую для вывода отладочных сообщений USART. Т.е. помимо программатора к плате подключен еще и преобразователь USB-USART - неудобно же.

Знаю, что есть такой интерфейс SWD, который поддерживает вывод отладочной информации через вывод SWO. Т.е. имея 1 программатор с интерфейсом SWD такой как ST-link/V2 можно и шить и получать отладочные сообщения.

Например при использовании USART на скорости 921600 бод 1 байт можно передать примерно за 11 мкс. Достаточно быстро и погрешность установки скорости 0,16%. Быстрее пробовал, но не пашет почему-то. Использую преобразователь на ft2232.

 

SWO может так же или быстрее? Нигде не найду конкретных значений.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не представляю, почему бы 921600 мог бы не работать через FT2232 - у меня avreal32 на одном порте FT2232, а терминал на другом, и на этой скорости - прекрасно работает. Равно как работает и через FT232. Про SWD - не подскажу...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

SWO может так же или быстрее? Нигде не найду конкретных значений.

 

На ST-Link больше пары сотен килобайт с SWO не выжмете.

Есть еще более быстрый отладочный вариант - https://habrahabr.ru/post/259205/

Но и он не даст более 500 Кбит/с

 

Если применить J-Link Ultra то пару мегабит сделать можно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Т.е. помимо программатора к плате подключен еще и преобразователь USB-USART - неудобно же.

Так выкиньте программатор нафиг и загружайте по тому-же отладочному UART. Всего делов загрузчик.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так выкиньте программатор нафиг и загружайте по тому-же отладочному UART. Всего делов загрузчик.

программатор в 10 раз быстрее грузит. Зачем делать то, что можно не делать? Загрузчик, софт для него.

 

Имхо ничего удобнее уарта для отладки нет. Большие скорости там не нужны, 115200 более чем достаточно.

Капец какое неудобство, надо два разъема подключать! А еще же и питание надо по третьему? Как можно так жить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На ST-Link больше пары сотен килобайт с SWO не выжмете.

 

Если применить J-Link Ultra то пару мегабит сделать можно.

Воот, я об этом и спрашивал. Спасибо за пояснение.

Так выкиньте программатор нафиг и загружайте по тому-же отладочному UART. Всего делов загрузчик.

Да, можно так, но в одно движение из Кейла вряд ли получится загрузить.

Имхо ничего удобнее уарта для отладки нет. Большие скорости там не нужны, 115200 более чем достаточно.

Капец какое неудобство, надо два разъема подключать! А еще же и питание надо по третьему? Как можно так жить?

Во-во и не говорите. Хотя питание от программатора беру :rolleyes:

Изменено пользователем Herz
Избыточное цитирование

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

SWO может так же или быстрее? Нигде не найду конкретных значений.

Лучше так не делать (не убирать отладочный UART). Вылезет потом у Вас проблема, что с подключенным SWD работает, а без - нет, как искать будете?

Включения/выключения питания, технологическое тестирование в течение длительного времени (когда какая-то инфа пишется в лог) с десятком устройств - как это всё делать?

Испытания на устойчивость к помехам и на помехоэмиссию с контролем работоспосбности, тоже - как?

Да и как-то пробовал я выводить отладку через J-Link, имхо: при этом нарушается реалтайм работы устройства, такое ощущение, что вывод через отладочный JTAG подтормаживает работу устройства,

по сравнению с обычной работой без лога или с логом в UART. Правда пробовал это не через SWD, а через JTAG. И может что-то не так сделал.

Но, имхо, работа с подключенным эмулятором и без оного - бывает несколько разной и нужно иметь возможность отладки и без подключенного эмулятора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да и как-то пробовал я выводить отладку через J-Link, имхо: при этом нарушается реалтайм работы устройства, такое ощущение, что вывод через отладочный JTAG подтормаживает работу устройства,

по сравнению с обычной работой без лога или с логом в UART. Правда пробовал это не через SWD, а через JTAG. И может что-то не так сделал.

Ну ещё бы. Semihosting - это старый механизм. Довольно гибкий, но крайне медленный:

- софт в контроллере на каждый putchar() выставляет брекпоинт.

- отладчик "ловит" этот брекпоинт, считывает переданный байтик (по определённой комбинации регистров, насколько я помню), отправляет в консоль.

Помимо двунаправленной консоли, можно ещё кучу "плюшек" организовать, но, вроде б, это так никто и не поддержал. Подробности есть на arm.com в разделе "ARM Compiler Software Development Guide" -> "Semihosting".

Но постоянные остановки ядра на пользу реалтайму не идут, конечно же.

 

SWO - это совсем другая штука. Ядро кладёт байтик в специальный регистр, а дальше "оно само". Но тут канал однонаправленный (впрочем, в 99% случаев отладочный канал такой и нужен).

 

Но, имхо, работа с подключенным эмулятором и без оного - бывает несколько разной и нужно иметь возможность отладки и без подключенного эмулятора.

Это если только энергосбережение какое-то отлаживать. Но там и внешний уарт мешать будет.

А так - SWD и SWO штуки независимые, можно использовать только что-то одно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Странно.

Куча разработчиков, но только единицы заботит быстродействие отладочного канала.

Хотя от этого напрямую зависит производительность программиста встраиваемых систем.

 

Короче так:

 

Скорость вывода по SWO вот в таком цикле :

#define TESTBUF_SZ 1024
char testbuf[TESTBUF_SZ];


  for (i=0;i<1000;i++)
  {
    fwrite(testbuf, 1 , TESTBUF_SZ, stdout);
  }

будет:

 

J-Link Ultra+ - 2.7 Мбайт/с

J-Link - 480 Кбайт/с

ST-Link/V2 - 160 Кбайт/с

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

программатор в 10 раз быстрее грузит. Зачем делать то, что можно не делать? Загрузчик, софт для него.

Это иллюзия, поскольку упираетесь в скорость записи во Flash а не в скорость передачи. Это раз. Загрузчик для серийного изделия по любому делать надо. Это два.

Ну и на лишний разъем это Вы жаловались, а не я.

 

 

Да, можно так, но в одно движение из Кейла вряд ли получится загрузить.

Получится в одно движение из терминальной программы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Странно.

Куча разработчиков, но только единицы заботит быстродействие отладочного канала.

Хотя от этого напрямую зависит производительность программиста встраиваемых систем.

 

Короче так:

 

Скорость вывода по SWO вот в таком цикле :

#define TESTBUF_SZ 1024
char testbuf[TESTBUF_SZ];


  for (i=0;i<1000;i++)
  {
    fwrite(testbuf, 1 , TESTBUF_SZ, stdout);
  }

будет:

 

J-Link Ultra+ - 2.7 Мбайт/с

J-Link - 480 Кбайт/с

ST-Link/V2 - 160 Кбайт/с

 

Понятно, что не для каждой задачи нужна максимальная скорость обмена.

Даже 160 кбайт/с неплохой результат, а значит вывод отладочной информации через ST-Link/V2 тоже имеет право на жизнь.

За вывод отладочной информации отвечает модуль ITM. Вот только не пойму -начиная с адреса 0xE0000000 расположены 32 32-х разрядных регистра (Stimulus port). Т.е. в любой из них кладем данные для передачи. И есть в регистре "ITM trace control" 23 бит - Busy. Как я понял - бит сигнализирует о занятости передатчика. Один на всех что ли? Тогда получается все как в UART - буфер передатчика и флаг занятости.

В общем, надо как-то это дело попробовать.

 

esaulenka, верно в 99% случаев достаточно одностороннего обмена.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Странно.

Куча разработчиков, но только единицы заботит быстродействие отладочного канала.

Хотя от этого напрямую зависит производительность программиста встраиваемых систем.

 

Короче так:

 

Скорость вывода по SWO вот в таком цикле :

#define TESTBUF_SZ 1024
char testbuf[TESTBUF_SZ];


  for (i=0;i<1000;i++)
  {
    fwrite(testbuf, 1 , TESTBUF_SZ, stdout);
  }

будет:

 

J-Link Ultra+ - 2.7 Мбайт/с

J-Link - 480 Кбайт/с

ST-Link/V2 - 160 Кбайт/с

 

Сравните со скоростью передачи через RTT

https://www.segger.com/jlink-rtt.html

раздел

Performance

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сравните со скоростью передачи через RTT

https://www.segger.com/jlink-rtt.html

раздел

Performance

Слыхал про RTT, но как-то не придал значения. Однако... Даже за 60 баксов можно получить колоссальную скорость.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сравните со скоростью передачи через RTT

 

Фишка RTT в том что он работает без ожидания готовности на основе буфера произвольного размера. Переполнения при этом фиксируются.

Поэтому его можно применять для логирования прерываний, переключения контекста, сервисов RTOS и прочих мелких и разреженных явлений без деградации реалтайма.

 

SWO же требует готовности на каждое слово, поэтому неминуемо замедлит логирование и испортит тайминги хоть и имеет большую пропускную способность чем RTT.

 

Я использую HS USB если нужен действительно быстрый канал для чего-то типа J-Scope.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...