logelectronix 0 15 июня, 2016 Опубликовано 15 июня, 2016 · Жалоба В настоящее время (впрочем как и многие начинающие) использую для вывода отладочных сообщений USART. Т.е. помимо программатора к плате подключен еще и преобразователь USB-USART - неудобно же. Знаю, что есть такой интерфейс SWD, который поддерживает вывод отладочной информации через вывод SWO. Т.е. имея 1 программатор с интерфейсом SWD такой как ST-link/V2 можно и шить и получать отладочные сообщения. Например при использовании USART на скорости 921600 бод 1 байт можно передать примерно за 11 мкс. Достаточно быстро и погрешность установки скорости 0,16%. Быстрее пробовал, но не пашет почему-то. Использую преобразователь на ft2232. SWO может так же или быстрее? Нигде не найду конкретных значений. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rx3apf 0 15 июня, 2016 Опубликовано 15 июня, 2016 · Жалоба Не представляю, почему бы 921600 мог бы не работать через FT2232 - у меня avreal32 на одном порте FT2232, а терминал на другом, и на этой скорости - прекрасно работает. Равно как работает и через FT232. Про SWD - не подскажу... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 15 июня, 2016 Опубликовано 15 июня, 2016 · Жалоба SWO может так же или быстрее? Нигде не найду конкретных значений. На ST-Link больше пары сотен килобайт с SWO не выжмете. Есть еще более быстрый отладочный вариант - https://habrahabr.ru/post/259205/ Но и он не даст более 500 Кбит/с Если применить J-Link Ultra то пару мегабит сделать можно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 15 июня, 2016 Опубликовано 15 июня, 2016 · Жалоба Т.е. помимо программатора к плате подключен еще и преобразователь USB-USART - неудобно же. Так выкиньте программатор нафиг и загружайте по тому-же отладочному UART. Всего делов загрузчик. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
slavka012 0 15 июня, 2016 Опубликовано 15 июня, 2016 · Жалоба Так выкиньте программатор нафиг и загружайте по тому-же отладочному UART. Всего делов загрузчик. программатор в 10 раз быстрее грузит. Зачем делать то, что можно не делать? Загрузчик, софт для него. Имхо ничего удобнее уарта для отладки нет. Большие скорости там не нужны, 115200 более чем достаточно. Капец какое неудобство, надо два разъема подключать! А еще же и питание надо по третьему? Как можно так жить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
logelectronix 0 15 июня, 2016 Опубликовано 15 июня, 2016 (изменено) · Жалоба На ST-Link больше пары сотен килобайт с SWO не выжмете. Если применить J-Link Ultra то пару мегабит сделать можно. Воот, я об этом и спрашивал. Спасибо за пояснение. Так выкиньте программатор нафиг и загружайте по тому-же отладочному UART. Всего делов загрузчик. Да, можно так, но в одно движение из Кейла вряд ли получится загрузить. Имхо ничего удобнее уарта для отладки нет. Большие скорости там не нужны, 115200 более чем достаточно. Капец какое неудобство, надо два разъема подключать! А еще же и питание надо по третьему? Как можно так жить? Во-во и не говорите. Хотя питание от программатора беру :rolleyes: Изменено 16 июня, 2016 пользователем Herz Избыточное цитирование Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 16 июня, 2016 Опубликовано 16 июня, 2016 · Жалоба SWO может так же или быстрее? Нигде не найду конкретных значений. Лучше так не делать (не убирать отладочный UART). Вылезет потом у Вас проблема, что с подключенным SWD работает, а без - нет, как искать будете? Включения/выключения питания, технологическое тестирование в течение длительного времени (когда какая-то инфа пишется в лог) с десятком устройств - как это всё делать? Испытания на устойчивость к помехам и на помехоэмиссию с контролем работоспосбности, тоже - как? Да и как-то пробовал я выводить отладку через J-Link, имхо: при этом нарушается реалтайм работы устройства, такое ощущение, что вывод через отладочный JTAG подтормаживает работу устройства, по сравнению с обычной работой без лога или с логом в UART. Правда пробовал это не через SWD, а через JTAG. И может что-то не так сделал. Но, имхо, работа с подключенным эмулятором и без оного - бывает несколько разной и нужно иметь возможность отладки и без подключенного эмулятора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 5 16 июня, 2016 Опубликовано 16 июня, 2016 · Жалоба Да и как-то пробовал я выводить отладку через J-Link, имхо: при этом нарушается реалтайм работы устройства, такое ощущение, что вывод через отладочный JTAG подтормаживает работу устройства, по сравнению с обычной работой без лога или с логом в UART. Правда пробовал это не через SWD, а через JTAG. И может что-то не так сделал. Ну ещё бы. Semihosting - это старый механизм. Довольно гибкий, но крайне медленный: - софт в контроллере на каждый putchar() выставляет брекпоинт. - отладчик "ловит" этот брекпоинт, считывает переданный байтик (по определённой комбинации регистров, насколько я помню), отправляет в консоль. Помимо двунаправленной консоли, можно ещё кучу "плюшек" организовать, но, вроде б, это так никто и не поддержал. Подробности есть на arm.com в разделе "ARM Compiler Software Development Guide" -> "Semihosting". Но постоянные остановки ядра на пользу реалтайму не идут, конечно же. SWO - это совсем другая штука. Ядро кладёт байтик в специальный регистр, а дальше "оно само". Но тут канал однонаправленный (впрочем, в 99% случаев отладочный канал такой и нужен). Но, имхо, работа с подключенным эмулятором и без оного - бывает несколько разной и нужно иметь возможность отладки и без подключенного эмулятора. Это если только энергосбережение какое-то отлаживать. Но там и внешний уарт мешать будет. А так - SWD и SWO штуки независимые, можно использовать только что-то одно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 16 июня, 2016 Опубликовано 16 июня, 2016 · Жалоба Можно использовать $1 JLink и RTT Нужно 3 провода минимум GND SWD SWC Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 16 июня, 2016 Опубликовано 16 июня, 2016 · Жалоба Странно. Куча разработчиков, но только единицы заботит быстродействие отладочного канала. Хотя от этого напрямую зависит производительность программиста встраиваемых систем. Короче так: Скорость вывода по 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 Кбайт/с Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 16 июня, 2016 Опубликовано 16 июня, 2016 · Жалоба программатор в 10 раз быстрее грузит. Зачем делать то, что можно не делать? Загрузчик, софт для него. Это иллюзия, поскольку упираетесь в скорость записи во Flash а не в скорость передачи. Это раз. Загрузчик для серийного изделия по любому делать надо. Это два. Ну и на лишний разъем это Вы жаловались, а не я. Да, можно так, но в одно движение из Кейла вряд ли получится загрузить. Получится в одно движение из терминальной программы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
logelectronix 0 16 июня, 2016 Опубликовано 16 июня, 2016 · Жалоба Странно. Куча разработчиков, но только единицы заботит быстродействие отладочного канала. Хотя от этого напрямую зависит производительность программиста встраиваемых систем. Короче так: Скорость вывода по 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% случаев достаточно одностороннего обмена. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 16 июня, 2016 Опубликовано 16 июня, 2016 · Жалоба Странно. Куча разработчиков, но только единицы заботит быстродействие отладочного канала. Хотя от этого напрямую зависит производительность программиста встраиваемых систем. Короче так: Скорость вывода по 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
logelectronix 0 16 июня, 2016 Опубликовано 16 июня, 2016 · Жалоба Сравните со скоростью передачи через RTT https://www.segger.com/jlink-rtt.html раздел Performance Слыхал про RTT, но как-то не придал значения. Однако... Даже за 60 баксов можно получить колоссальную скорость. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 16 июня, 2016 Опубликовано 16 июня, 2016 · Жалоба Сравните со скоростью передачи через RTT Фишка RTT в том что он работает без ожидания готовности на основе буфера произвольного размера. Переполнения при этом фиксируются. Поэтому его можно применять для логирования прерываний, переключения контекста, сервисов RTOS и прочих мелких и разреженных явлений без деградации реалтайма. SWO же требует готовности на каждое слово, поэтому неминуемо замедлит логирование и испортит тайминги хоть и имеет большую пропускную способность чем RTT. Я использую HS USB если нужен действительно быстрый канал для чего-то типа J-Scope. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться