реклама на сайте
подробности

 
 
> Тонкости отладки, JTAG, printf, светодиоды, ножки + осциллограф
haker_fox
сообщение Jul 3 2018, 09:00
Сообщение #1


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Добрый день, коллеги!

Собственно говоря, вопрос в теме. Просьба поделиться, кто как отлаживает свои проекты, выполненные на микроконтроллерах. Ядро не принципиально, но лучше Cortex-M0/3/4(F).

Почему возник вопрос? Раньше я не пользовался для отладки JTAGом. В не меньшей степени этому способствовали отзывы об этом инструменте уважаемого zltigo. Кто на форуме давно, тот поймёт. Поэтому я поднимал консольку. И работал с ней. Где было необходимо посмотреть вывод программы, добавлял свои версии printf. Либо махал лапками, с подключенным оциллографом. Потом, попробовав вкусности, предоставляемые JTAG, пользовался только им. При этом вывод в консоль стал если не вторым по приоритету, то точно на равне с отладчиком. Но вот проблема. Пользователю нужно отправлять программу с выставленными уровнями оптимизации (обычно balanced для IAR). Отладживать же программу с этим уровнем не всегда удобно, т.к. исчезают переменные, ветвления и даже функции. Т.е. возниакает предположение, что JTAG годится только для черновой и грубой отладки. Дальше поднимаем уровень оптимизации, и пользуемся printf'ом и подобными инструментами. Но как принтфом получить информацию, что, скажем содержится в регистрах ssp или dma модуля, как остановить программу в нужном месте и посмотреть переменные? Как отследить call stack? Уважаемый zltigo часто говорил, что ему хватает только консольки, и за отладчик он берётся только в особо сложных случаях.
В общем я снова стал приходить к выводу, что отлаживаться через аппаратный отладчик - бесполезная затея. Нужно сразу выставлять уровень оптимизации на максимум, и использовать иные способы. В связи с этим у меня возникла определённая каша в голове, и захотелось услышать мнение коллег по этому вопросу? Возможно ли использовать что-то вместо JTAG при отладке, почти не уступающее ему по возможностям? Или может быть я вообще не тем путём иду?
Спасибо!


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
uriy
сообщение Jul 3 2018, 17:59
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Цитата
RTT хорош когда у чипа нет вывода SWO.
Не соглашусь. Насколько я знаю через SWO невозможно выводить по прерываниям. SWO работает только через поллинг. Это значит ваш код с выключенными отладочными сообщения будет работать совсем по другому. Если я не прав покажите как выводить через SWO по прерываниям.
RTT же работает по прерываниям. Причем можно настроить разное поведение по переполнению буфера. Можно ждать когда в нем появится место а можно откинуть данные. Вот тут отличная статья о нем https://habr.com/post/259205/

Цитата
А так следует учесть, что консоль работающая по RTT сразу схлопывается если выключить режим отладки, скажем перейти в редактирование.
В смысле RTT viewer приходится перезапускать? Да это напрягает. Иногда он работает после рестарта кода иногда нет.

Цитата
Как я понимаю, RTT абсолютно даром выкачивается с сеггера.
Не знаю. Я ставлю скачанный софт для jlink с закромов там вроде сразу все ставится. Отдельно RTT вроде не ставил.

Tracealyzer https://electronix.ru/forum/index.php?showtopic=127646

Для вывода данных через RTT использую вот такие макросы

Код
#define DEBUG_MSG    // default color
#define INFO_MSG    // green color
#define WARNING_MSG    // yellow
#define ERROR_MSG    // red


#ifdef DEBUG_MSG
#define DEBUG(fmt, args...) \
        SEGGER_RTT_printf(0,"%s%s %-20s:%-4d: " fmt "%s\r\n", RTT_CTRL_TEXT_WHITE, GetUpTimeASCII(), __func__, __LINE__, ## args, RTT_CTRL_RESET)
#else
    #define DEBUG(fmt, args...)
#endif

#ifdef INFO_MSG
#define INFO(fmt, args...) \
        SEGGER_RTT_printf(0,"%s%s %-20s:%-4d: " fmt "%s\r\n", RTT_CTRL_TEXT_BRIGHT_GREEN, GetUpTimeASCII(), __func__, __LINE__, ## args, RTT_CTRL_RESET)
#else
    #define INFO(fmt, args...)
#endif

#ifdef WARNING_MSG
#define WARNING(fmt, args...) \
        SEGGER_RTT_printf(0,"%s%s %-20s:%-4d: " fmt "%s\r\n", RTT_CTRL_TEXT_BRIGHT_YELLOW, GetUpTimeASCII(), __func__, __LINE__, ## args, RTT_CTRL_RESET)
#else
    #define WARNING(fmt, args...)
#endif

#ifdef ERROR_MSG
#define ERROR(fmt, args...) \
        SEGGER_RTT_printf(0,"%s%s %-20s:%-4d: " fmt "%s\r\n", RTT_CTRL_TEXT_BRIGHT_RED, GetUpTimeASCII(), __func__, __LINE__, ## args, RTT_CTRL_RESET)
#else
    #define ERROR(fmt, args...)
#endif
для putty через uart туда добавляю еще эскейп последовательности для цвета. Если надо оставить например только сообщения об ошибках закрываю дефайны в самом верху.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jul 4 2018, 08:10
Сообщение #3


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(uriy @ Jul 3 2018, 20:59) *
Не соглашусь. Насколько я знаю через SWO невозможно ....
Вот тут отличная статья о нем

Эт моя статья. biggrin.gif
Здесь я SWO упомянул в связи с использованием такой фичи Cortex-ов как Trace Port Interface Unit
Вот действительно очень нужная, просто критически необходимая вещь.

Почему здесь о ней ни разу ничего не видел даже странно.
Этот интерфейс связывает отладчик с Instrumentation Trace Macrocell (ITM)
Например в IAR есть хидер arm_itm.h с объявлениями типа ITM_EVENT8(channel, value)
Это как раз симулирует вывод на виртуальный пин сигнала чтобы посмотреть временную характеристику.
Только смотрят не осциллографом, а прямо в окне отладчика в виде графика.
Таких сигналов можно сотнями создавать, программе они обходятся в пару тактов.
И измерять их время с точностью до наносекунд. Можно среднее смотреть, можно худшее-лучшее время.
Именно с помощью ITM можно надежно посмотреть как оптимизация влияет на скорость разных функций и прерываний.
Кстати, временные характеристики (когда случились, сколько длились, кого прервали) всех прерываний выводятся через ITM автоматически без вставки каких либо команд.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- haker_fox   Тонкости отладки   Jul 3 2018, 09:00
- - jcxz   Цитата(haker_fox @ Jul 3 2018, 12:00) Отл...   Jul 3 2018, 09:15
|- - haker_fox   QUOTE (jcxz @ Jul 3 2018, 17:15) А зачем,...   Jul 3 2018, 10:16
|- - jcxz   Цитата(haker_fox @ Jul 3 2018, 13:16) Бан...   Jul 4 2018, 08:07
|- - haker_fox   QUOTE (jcxz @ Jul 4 2018, 16:07) Вместо т...   Jul 4 2018, 09:48
|- - jcxz   Цитата(haker_fox @ Jul 4 2018, 12:48) Да?...   Jul 4 2018, 09:53
- - Arlleex   Добрый день! Вопрос больше религиозный - кому ...   Jul 3 2018, 10:17
|- - kolobok0   Цитата(Arlleex @ Jul 3 2018, 13:17) ..Воп...   Jul 3 2018, 11:04
- - x893   Jlink (SWD) + RTT   Jul 3 2018, 10:58
- - scifi   Цитата(haker_fox @ Jul 3 2018, 12:00) Пол...   Jul 3 2018, 11:49
- - haker_fox   Коллеги, спасибо! Я не собираюсь отказываться ...   Jul 3 2018, 13:36
- - Kabdim   Конкретно поинт про ненужность дебагера у злтиго с...   Jul 3 2018, 13:49
|- - haker_fox   QUOTE (Kabdim @ Jul 3 2018, 21:49) Конкре...   Jul 3 2018, 13:59
|- - jcxz   Цитата(Kabdim @ Jul 3 2018, 16:49) Очень ...   Jul 4 2018, 08:18
|- - AlexandrY   Цитата(jcxz @ Jul 4 2018, 11:12) Полность...   Jul 4 2018, 08:22
|- - Kabdim   Цитата(AlexandrY @ Jul 4 2018, 11:22) GCC...   Jul 4 2018, 09:25
- - AlexandrY   Цитата(haker_fox @ Jul 3 2018, 12:00) Соб...   Jul 3 2018, 14:08
- - uriy   Компилю сразу с включенной оптимизацией, если надо...   Jul 3 2018, 14:08
- - haker_fox   QUOTE (AlexandrY @ Jul 3 2018, 22:08) Да ...   Jul 3 2018, 14:34
|- - AlexandrY   Цитата(haker_fox @ Jul 3 2018, 17:34) ВО...   Jul 3 2018, 16:59
|- - haker_fox   QUOTE (AlexandrY @ Jul 4 2018, 00:59) у м...   Jul 4 2018, 04:34
- - k155la3   При работе с дебаггером : Вместо отладочного prin...   Jul 3 2018, 15:06
- - uriy   Вот что оказывается надо сделать https://devzone.n...   Jul 4 2018, 05:02
- - haker_fox   Попробовал RTT. С наскоку (сразу) заработал вывод ...   Jul 4 2018, 05:42
- - uriy   ЦитатаЗдесь я SWO упомянул в связи с использование...   Jul 4 2018, 09:57
- - haker_fox   QUOTE (jcxz @ Jul 4 2018, 17:53) Тогда у ...   Jul 4 2018, 10:19
- - jcxz   Цитата(haker_fox @ Jul 4 2018, 13:19) Но ...   Jul 4 2018, 10:30
|- - haker_fox   QUOTE (jcxz @ Jul 4 2018, 18:30) Ибо заче...   Jul 4 2018, 12:28
|- - jcxz   Цитата(haker_fox @ Jul 4 2018, 15:28) Я н...   Jul 4 2018, 12:43
- - AlexandrY   Цитата(haker_fox @ Jul 4 2018, 13:19) Одн...   Jul 4 2018, 10:36
- - jcxz   Цитата(AlexandrY @ Jul 4 2018, 13:36) Так...   Jul 4 2018, 11:32


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 12th August 2025 - 09:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01402 секунд с 7
ELECTRONIX ©2004-2016