Jump to content

    

Тонкости отладки

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

 

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

 

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

В общем я снова стал приходить к выводу, что отлаживаться через аппаратный отладчик - бесполезная затея. Нужно сразу выставлять уровень оптимизации на максимум, и использовать иные способы. В связи с этим у меня возникла определённая каша в голове, и захотелось услышать мнение коллег по этому вопросу? Возможно ли использовать что-то вместо JTAG при отладке, почти не уступающее ему по возможностям? Или может быть я вообще не тем путём иду?

Спасибо!

Share this post


Link to post
Share on other sites
Отладживать же программу с этим уровнем не всегда удобно, т.к. исчезают переменные, ветвления и даже функции.

А зачем, извините, отлаживать программу с включённой оптимизацией? :wacko:

Share this post


Link to post
Share on other sites
А зачем, извините, отлаживать программу с включённой оптимизацией? :wacko:

Потому что по мой опыт подсказывает, что программа с включенной оптимизацией может работать несколько по-другому. Банально, по причине изменившихся времён выполнения кода. Понимаю, что некорректное программирование. Но вот и надо отладить эти моменты. А по-этому и вижу целесообразность отлаживать сразу с оптимизацией. В общем хочется внешнего опыта по этому вопросу)

Share this post


Link to post
Share on other sites

Добрый день!

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

У себя я отлаживаю с помощью аппаратного отладчика, однако в программе всегда реализован механизм вывода статистики через консоль.

 

Но как принтфом получить информацию, что, скажем содержится в регистрах ssp или dma модуля, как остановить программу в нужном месте и посмотреть переменные?

Отладчик читает эту информацию ровно так же, как и программное чтение. Если Вы отладчиком прочитаете чувствительный к чтению регистр, программа и под дебаггером будет вести себя эпично-эпилепсично. Программу остановить можно, по крайней мере в Cortex-Mx, инструкцией программной точки останова BKPT + некое шаманство с регистрами отладчика (режим Halt вроде).

Отказываться от отладчика, ИМХО, глупо. Ну а насчет отладки в оптимизированных программах - то, как было сказано выше, это бесполезно (понятное дело, почему). Программа должна работать одинаково на любых уровнях оптимизации. Если это не так - это уже повод подсуетиться и посидеть денек над облагораживанием программы на предмет возможных скрытых багов. Оптимизатор не исправляет ошибки пользователя - он лишь жестче показывает программисту, где он не прав, на мой взгляд :laughing:

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

Осциллографом и лапкой МК смотрю обычно правильность настройки частоты этого МК по таймерам. Светодиодов пару всегда на устройствах ставлю - это дэ-факто. Ну а насчет call stack - программно тоже можно сделать, достаточно проанализировать состояние CPU и содержимое стека.

Edited by Arlleex

Share this post


Link to post
Share on other sites

Jlink (SWD) + RTT

Share this post


Link to post
Share on other sites
..Вопрос больше религиозный - кому что больше нравится....

 

предлагаю перевести в плоскость "какие существуют" или "какие юзали-знаете"...

 

у мну зависило от задачи, камня, возможностей(читай лапок).

ногодрыг (осцил, светодиодик), jtag отладка, в лог файл (конфигурирование из ini файла)

не юзал, но на мой взгляд заслуживают внимания: - по сети (если проект поддерживает сеть)

так-же интересен подход в 1 пин (делается декодер на скорострельной плисине), делается код на сях (разница нолика от единички - в один ноп) и всё...достаточно шустро и не зависит от тактовой...

 

так-же нужно упомянуть про средства ловли hardfault.

на обработчик вещаем добычу всей инфы до какой дотянемся (регистры, стэк, затирка стэка, состояние-прохождение контрольных точек если есть) и пишем во флэш. далее при старте считываем(если была запись) из флэша и пишем цивильно в систему логирования.

 

 

как то так...

(круглый)

 

Share this post


Link to post
Share on other sites
Пользователю нужно отправлять программу с выставленными уровнями оптимизации (обычно balanced для IAR).

Интересное ограничение. Откуда взялся такой привередливый пользователь? Прямо так и говорит: "включайте оптимизацию, адназначна"? :wacko:

Share this post


Link to post
Share on other sites

Коллеги, спасибо! Я не собираюсь отказываться от отладчика. Просто интересно было услышать какие есть альтернативы ему кроме тех, которые мне известны.

Обработчики на hardfault, stack overflow и out of heap у меня есть. Также использую configASSERT (из FreeRTOS). В eeprom пижу журнал на 20 событий, прямо текстом в случае наступления этих событий. EEPROM находится внутри МК, поэтому доступ к ней 100%, даже в обход штатных драйверов под управлением оси. Помогает видеть статистику сбоев.

 

Интересное ограничение. Откуда взялся такой привередливый пользователь? Прямо так и говорит: "включайте оптимизацию, адназначна"? :wacko:

Если это стёб, то как принято сейчас говорить очень толсто!. Я ничего не говорил о требованиях пользователя. Но я сказал, что пользователю требуется отправлять. По нашим внутренним требованиям.

Share this post


Link to post
Share on other sites

Конкретно поинт про ненужность дебагера у злтиго считаю снобским и вредным. Он работает для самого злтиго и 5% таких же как он. А его попытка убедить всех что его рецепт применим для всех, а если пользуешься дебагером то "нипрограмист" откровенна вредна. Спустя десятки лет набитых шишок десятки схожих задач и проектоа, возможно дебагер и правда будет не нужен, но это значит только то что человек которому не нужен дебагер вошел таки в эти 5%.

 

Для чувствительных ко времени и плавающих багов, вначале ищу примерное место с браком. Потом добавляю туда бинарный логер, который никуда не выводит данные, а тихонько их накапливает в буфер. В некритичные моменты времени проверяю буфер на наличие признаков ошибочности. При наличии обычно bkpt и уже курю результат на паузе.

Интересное ограничение. Откуда взялся такой привередливый пользователь? Прямо так и говорит: "включайте оптимизацию, адназначна"? :wacko:

Очень правильный пользователь, которых хочет отсечь бракоделов с UB. Высокий уровень оптимизации хорошо выявляет таких "индусов".

Share this post


Link to post
Share on other sites
Конкретно этот поинт

У меня есть предложение, давайте говорить либо на чистом английском, если вы умеете, а не на кальке, либо на русском :rolleyes: 5 минут вчитывался в слово, и думал, вы допустили опечатку :rolleyes:

это значит только то что человек которому не нужен дебагер вошел таки в эти 5%.

Понятно, у меня примерно такие же измышления.

При наличии обычно bkpt и уже курю результат на паузе.

Это уже интересно. Т.е. ассемблерная вставка (или макрос) с командой. Но, получается, что JTAG должен быть подключен.

Очень правильный пользователь, которых хочет отсечь бракоделов с UB. Высокий уровень оптимизации хорошо выявляет "индусов".

Давайте будем жить реалиями. Большая часть пользователей вообще не разбирается в программировании. И оптимизация делается не для них, а по причине того, что прошивка должна войти в строго ограниченный объём флешки. Зачем это делается - говорить не буду. Но кто в теме, догадается)))

Высокий уровень оптимизации хорошо выявляет "индусов".

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

 

Кстати, отладчик не очень помогает, когда снаружи микроконтроллера висит железка, дающая этак 8 кГц на ногу прерываний, по прерываниям запускаются транзакции DMA и т.п. В момент остановки отладчиком, обычно выпадаем в ошибку DMA, или сразу после возобновления выполнения ПО. Т.к. потеряна синхронизации пакетов.

Share this post


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

Почему возник вопрос? Раньше я не пользовался для отладки JTAGом. В не меньшей степени этому способствовали отзывы об этом инструменте уважаемого zltigo. Кто на форуме давно, тот поймёт.

Да что-то давно не слышно zltigo.

Его искрометный сарказм здОрово веселил в былые времена.

С тех пор мало что изменилось в отладке.

 

Ну вот я стал ставить RGB светодиоды. Эт честно был прорыв в нашей сфере. Конкуренты увяли.

Они лепили кастомные платы, ставили туда десяточек одноцветных диодов и преподносили это как великолепную диагностическую панель.

А мы повесили дешевую RGB ленту и вывели на нее сотни! диагностических сигналов.

Ну надписали их конечно.

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

Откуда собственно и растут ноги у этого проекта - https://habr.com/post/373027/

Share this post


Link to post
Share on other sites

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

Логи вывожу через RTT + китайский Jlink (правда мне в нем не нравится отсутствие возможности вывода цветного текста) или uart в putty (тут с цветным текстом нет проблем).

Логический анализатор saleae китайский клон, usb-uart переходник.

Tracealyzer для Freertos

Share this post


Link to post
Share on other sites
Да что-то давно не слышно zltigo.

Да, без него скучно... И опыт у него огромный. Жаль, что исчез(((

 

Логи вывожу через RTT

Tracealyzer для Freertos

ВО! Точно, давно о них знаю, но всё никак не попробовал.

Как я понимаю, RTT абсолютно даром выкачивается с сеггера.

А вот Traceanalyzer врод как за денежку. Не подскажете, есть на наших закромах "нежадная" версия?

Share this post


Link to post
Share on other sites

При работе с дебаггером :

Вместо отладочного printf - использую "log" breakpoint. (это не требует перекомпиляции, изменения кода, можно менять-переставлять BP во время отладки).

Для отладки в "жестком" реалтайме (таймеры, прерывания, RTOS) - ногодрыг, выводимый на осцилограф с лог.анализатор или ЛА Saleae.

Критерий правильности софта - когда debug и release версии работают одинаково. Опции оптимизации - по необходимости, но когда после их изменения что-то перестает работать - стараюсь разобраться в причине.

JTAG экономит много времени и невров.

Share this post


Link to post
Share on other sites
ВО! Точно, давно о них знаю, но всё никак не попробовал.

RTT хорош когда у чипа нет вывода SWO.

А так следует учесть, что консоль работающая по RTT сразу схлопывается если выключить режим отладки, скажем перейти в редактирование.

 

Но консоль сама по себе довольно устаревший подход.

Я тут в инетах видел гуляет микриумовский uC/Probe.

Правда сам не пробовал, у меня есть неплохой аналог, но за такими штуками будущее отладки.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this