|
Тонкости отладки, JTAG, printf, светодиоды, ножки + осциллограф |
|
|
|
Jul 3 2018, 09:00
|
Познающий...
Группа: Свой
Сообщений: 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 при отладке, почти не уступающее ему по возможностям? Или может быть я вообще не тем путём иду? Спасибо!
--------------------
Выбор.
|
|
|
|
|
Jul 3 2018, 10:17
|
Местный
Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264
|
Добрый день! Вопрос больше религиозный - кому что больше нравится. У себя я отлаживаю с помощью аппаратного отладчика, однако в программе всегда реализован механизм вывода статистики через консоль. Цитата Но как принтфом получить информацию, что, скажем содержится в регистрах ssp или dma модуля, как остановить программу в нужном месте и посмотреть переменные? Отладчик читает эту информацию ровно так же, как и программное чтение. Если Вы отладчиком прочитаете чувствительный к чтению регистр, программа и под дебаггером будет вести себя эпично-эпилепсично. Программу остановить можно, по крайней мере в Cortex-Mx, инструкцией программной точки останова BKPT + некое шаманство с регистрами отладчика (режим Halt вроде). Отказываться от отладчика, ИМХО, глупо. Ну а насчет отладки в оптимизированных программах - то, как было сказано выше, это бесполезно (понятное дело, почему). Программа должна работать одинаково на любых уровнях оптимизации. Если это не так - это уже повод подсуетиться и посидеть денек над облагораживанием программы на предмет возможных скрытых багов. Оптимизатор не исправляет ошибки пользователя - он лишь жестче показывает программисту, где он не прав, на мой взгляд Ну а для устройств, которые должны отлаживаться далеко за пределами моего рабочего стола - я веду систему логгирования всего и вся на внутренний накопитель и при возникновении проблем - требую .log файл сессии, где уже с ним в поте лица сижу и думаю "шо цэ такое было". Осциллографом и лапкой МК смотрю обычно правильность настройки частоты этого МК по таймерам. Светодиодов пару всегда на устройствах ставлю - это дэ-факто. Ну а насчет call stack - программно тоже можно сделать, достаточно проанализировать состояние CPU и содержимое стека.
Сообщение отредактировал Arlleex - Jul 3 2018, 10:19
|
|
|
|
|
Jul 3 2018, 11:04
|
практикующий тех. волшебник
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417
|
Цитата(Arlleex @ Jul 3 2018, 13:17) ..Вопрос больше религиозный - кому что больше нравится.... предлагаю перевести в плоскость "какие существуют" или "какие юзали-знаете"... у мну зависило от задачи, камня, возможностей(читай лапок). ногодрыг (осцил, светодиодик), jtag отладка, в лог файл (конфигурирование из ini файла) не юзал, но на мой взгляд заслуживают внимания: - по сети (если проект поддерживает сеть) так-же интересен подход в 1 пин (делается декодер на скорострельной плисине), делается код на сях (разница нолика от единички - в один ноп) и всё...достаточно шустро и не зависит от тактовой... так-же нужно упомянуть про средства ловли hardfault. на обработчик вещаем добычу всей инфы до какой дотянемся (регистры, стэк, затирка стэка, состояние-прохождение контрольных точек если есть) и пишем во флэш. далее при старте считываем(если была запись) из флэша и пишем цивильно в систему логирования. как то так... (круглый)
|
|
|
|
|
Jul 3 2018, 13:36
|
Познающий...
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125
|
Коллеги, спасибо! Я не собираюсь отказываться от отладчика. Просто интересно было услышать какие есть альтернативы ему кроме тех, которые мне известны. Обработчики на hardfault, stack overflow и out of heap у меня есть. Также использую configASSERT (из FreeRTOS). В eeprom пижу журнал на 20 событий, прямо текстом в случае наступления этих событий. EEPROM находится внутри МК, поэтому доступ к ней 100%, даже в обход штатных драйверов под управлением оси. Помогает видеть статистику сбоев. QUOTE (scifi @ Jul 3 2018, 19:49) Интересное ограничение. Откуда взялся такой привередливый пользователь? Прямо так и говорит: "включайте оптимизацию, адназначна"? Если это стёб, то как принято сейчас говорить очень толсто!. Я ничего не говорил о требованиях пользователя. Но я сказал, что пользователю требуется отправлять. По нашим внутренним требованиям.
--------------------
Выбор.
|
|
|
|
|
Jul 3 2018, 13:49
|
Знающий
Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842
|
Конкретно поинт про ненужность дебагера у злтиго считаю снобским и вредным. Он работает для самого злтиго и 5% таких же как он. А его попытка убедить всех что его рецепт применим для всех, а если пользуешься дебагером то "нипрограмист" откровенна вредна. Спустя десятки лет набитых шишок десятки схожих задач и проектоа, возможно дебагер и правда будет не нужен, но это значит только то что человек которому не нужен дебагер вошел таки в эти 5%. Для чувствительных ко времени и плавающих багов, вначале ищу примерное место с браком. Потом добавляю туда бинарный логер, который никуда не выводит данные, а тихонько их накапливает в буфер. В некритичные моменты времени проверяю буфер на наличие признаков ошибочности. При наличии обычно bkpt и уже курю результат на паузе. Цитата(scifi @ Jul 3 2018, 14:49) Интересное ограничение. Откуда взялся такой привередливый пользователь? Прямо так и говорит: "включайте оптимизацию, адназначна"? Очень правильный пользователь, которых хочет отсечь бракоделов с UB. Высокий уровень оптимизации хорошо выявляет таких "индусов".
|
|
|
|
|
Jul 3 2018, 13:59
|
Познающий...
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125
|
QUOTE (Kabdim @ Jul 3 2018, 21:49) Конкретно этот поинт У меня есть предложение, давайте говорить либо на чистом английском, если вы умеете, а не на кальке, либо на русском 5 минут вчитывался в слово, и думал, вы допустили опечатку QUOTE (Kabdim @ Jul 3 2018, 21:49) это значит только то что человек которому не нужен дебагер вошел таки в эти 5%. Понятно, у меня примерно такие же измышления. QUOTE (Kabdim @ Jul 3 2018, 21:49) При наличии обычно bkpt и уже курю результат на паузе. Это уже интересно. Т.е. ассемблерная вставка (или макрос) с командой. Но, получается, что JTAG должен быть подключен. QUOTE (Kabdim @ Jul 3 2018, 21:49) Очень правильный пользователь, которых хочет отсечь бракоделов с UB. Высокий уровень оптимизации хорошо выявляет "индусов". Давайте будем жить реалиями. Большая часть пользователей вообще не разбирается в программировании. И оптимизация делается не для них, а по причине того, что прошивка должна войти в строго ограниченный объём флешки. Зачем это делается - говорить не буду. Но кто в теме, догадается))) QUOTE (Kabdim @ Jul 3 2018, 21:49) Высокий уровень оптимизации хорошо выявляет "индусов". Прежде всего это для собственного (я про себя) самолюбия и гордости. Без иронии. Ну, и посольку, я не один проект выполняю, мнение коллег тоже учитывается. Кстати, отладчик не очень помогает, когда снаружи микроконтроллера висит железка, дающая этак 8 кГц на ногу прерываний, по прерываниям запускаются транзакции DMA и т.п. В момент остановки отладчиком, обычно выпадаем в ошибку DMA, или сразу после возобновления выполнения ПО. Т.к. потеряна синхронизации пакетов.
--------------------
Выбор.
|
|
|
|
|
Jul 3 2018, 14:08
|
Ally
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050
|
Цитата(haker_fox @ Jul 3 2018, 12:00) Собственно говоря, вопрос в теме. Просьба поделиться, кто как отлаживает свои проекты, выполненные на микроконтроллерах. Ядро не принципиально, но лучше Cortex-M0/3/4(F). Почему возник вопрос? Раньше я не пользовался для отладки JTAGом. В не меньшей степени этому способствовали отзывы об этом инструменте уважаемого zltigo. Кто на форуме давно, тот поймёт. Да что-то давно не слышно zltigo. Его искрометный сарказм здОрово веселил в былые времена. С тех пор мало что изменилось в отладке. Ну вот я стал ставить RGB светодиоды. Эт честно был прорыв в нашей сфере. Конкуренты увяли. Они лепили кастомные платы, ставили туда десяточек одноцветных диодов и преподносили это как великолепную диагностическую панель. А мы повесили дешевую RGB ленту и вывели на нее сотни! диагностических сигналов. Ну надписали их конечно. Один взгляд и практически сразу ясно что случилось с системой. Откуда собственно и растут ноги у этого проекта - https://habr.com/post/373027/
|
|
|
|
|
Jul 3 2018, 14:34
|
Познающий...
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125
|
QUOTE (AlexandrY @ Jul 3 2018, 22:08) Да что-то давно не слышно zltigo. Да, без него скучно... И опыт у него огромный. Жаль, что исчез((( QUOTE (uriy @ Jul 3 2018, 22:08) Логи вывожу через RTT Tracealyzer для Freertos ВО! Точно, давно о них знаю, но всё никак не попробовал. Как я понимаю, RTT абсолютно даром выкачивается с сеггера. А вот Traceanalyzer врод как за денежку. Не подскажете, есть на наших закромах "нежадная" версия?
--------------------
Выбор.
|
|
|
|
|
Jul 3 2018, 16:59
|
Ally
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050
|
Цитата(haker_fox @ Jul 3 2018, 17:34) ВО! Точно, давно о них знаю, но всё никак не попробовал. RTT хорош когда у чипа нет вывода SWO. А так следует учесть, что консоль работающая по RTT сразу схлопывается если выключить режим отладки, скажем перейти в редактирование. Но консоль сама по себе довольно устаревший подход. Я тут в инетах видел гуляет микриумовский uC/Probe. Правда сам не пробовал, у меня есть неплохой аналог, но за такими штуками будущее отладки.
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|