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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Тонкости отладки, 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
jcxz
сообщение Jul 3 2018, 09:15
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(haker_fox @ Jul 3 2018, 12:00) *
Отладживать же программу с этим уровнем не всегда удобно, т.к. исчезают переменные, ветвления и даже функции.

А зачем, извините, отлаживать программу с включённой оптимизацией? wacko.gif
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jul 3 2018, 10:16
Сообщение #3


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

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



QUOTE (jcxz @ Jul 3 2018, 17:15) *
А зачем, извините, отлаживать программу с включённой оптимизацией? wacko.gif

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


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Jul 3 2018, 10:17
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



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

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

Отладчик читает эту информацию ровно так же, как и программное чтение. Если Вы отладчиком прочитаете чувствительный к чтению регистр, программа и под дебаггером будет вести себя эпично-эпилепсично. Программу остановить можно, по крайней мере в Cortex-Mx, инструкцией программной точки останова BKPT + некое шаманство с регистрами отладчика (режим Halt вроде).
Отказываться от отладчика, ИМХО, глупо. Ну а насчет отладки в оптимизированных программах - то, как было сказано выше, это бесполезно (понятное дело, почему). Программа должна работать одинаково на любых уровнях оптимизации. Если это не так - это уже повод подсуетиться и посидеть денек над облагораживанием программы на предмет возможных скрытых багов. Оптимизатор не исправляет ошибки пользователя - он лишь жестче показывает программисту, где он не прав, на мой взгляд laughing.gif
Ну а для устройств, которые должны отлаживаться далеко за пределами моего рабочего стола - я веду систему логгирования всего и вся на внутренний накопитель и при возникновении проблем - требую .log файл сессии, где уже с ним в поте лица сижу и думаю "шо цэ такое было".
Осциллографом и лапкой МК смотрю обычно правильность настройки частоты этого МК по таймерам. Светодиодов пару всегда на устройствах ставлю - это дэ-факто. Ну а насчет call stack - программно тоже можно сделать, достаточно проанализировать состояние CPU и содержимое стека.

Сообщение отредактировал Arlleex - Jul 3 2018, 10:19
Go to the top of the page
 
+Quote Post
x893
сообщение Jul 3 2018, 10:58
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Jlink (SWD) + RTT
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Jul 3 2018, 11:04
Сообщение #6


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(Arlleex @ Jul 3 2018, 13:17) *
..Вопрос больше религиозный - кому что больше нравится....


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

у мну зависило от задачи, камня, возможностей(читай лапок).
ногодрыг (осцил, светодиодик), jtag отладка, в лог файл (конфигурирование из ini файла)
не юзал, но на мой взгляд заслуживают внимания: - по сети (если проект поддерживает сеть)
так-же интересен подход в 1 пин (делается декодер на скорострельной плисине), делается код на сях (разница нолика от единички - в один ноп) и всё...достаточно шустро и не зависит от тактовой...

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


как то так...
(круглый)
Go to the top of the page
 
+Quote Post
scifi
сообщение Jul 3 2018, 11:49
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(haker_fox @ Jul 3 2018, 12:00) *
Пользователю нужно отправлять программу с выставленными уровнями оптимизации (обычно balanced для IAR).

Интересное ограничение. Откуда взялся такой привередливый пользователь? Прямо так и говорит: "включайте оптимизацию, адназначна"? wacko.gif
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jul 3 2018, 13:36
Сообщение #8


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

Группа: Свой
Сообщений: 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) *
Интересное ограничение. Откуда взялся такой привередливый пользователь? Прямо так и говорит: "включайте оптимизацию, адназначна"? wacko.gif

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


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Jul 3 2018, 13:49
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



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

Для чувствительных ко времени и плавающих багов, вначале ищу примерное место с браком. Потом добавляю туда бинарный логер, который никуда не выводит данные, а тихонько их накапливает в буфер. В некритичные моменты времени проверяю буфер на наличие признаков ошибочности. При наличии обычно bkpt и уже курю результат на паузе.
Цитата(scifi @ Jul 3 2018, 14:49) *
Интересное ограничение. Откуда взялся такой привередливый пользователь? Прямо так и говорит: "включайте оптимизацию, адназначна"? wacko.gif

Очень правильный пользователь, которых хочет отсечь бракоделов с UB. Высокий уровень оптимизации хорошо выявляет таких "индусов".
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jul 3 2018, 13:59
Сообщение #10


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

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



QUOTE (Kabdim @ Jul 3 2018, 21:49) *
Конкретно этот поинт

У меня есть предложение, давайте говорить либо на чистом английском, если вы умеете, а не на кальке, либо на русском rolleyes.gif 5 минут вчитывался в слово, и думал, вы допустили опечатку rolleyes.gif
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, или сразу после возобновления выполнения ПО. Т.к. потеряна синхронизации пакетов.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jul 3 2018, 14:08
Сообщение #11


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/
Go to the top of the page
 
+Quote Post
uriy
сообщение Jul 3 2018, 14:08
Сообщение #12


Гуру
******

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



Компилю сразу с включенной оптимизацией, если надо что-то отлаживать по шагам оптимизацию отключаю.
Логи вывожу через RTT + китайский Jlink (правда мне в нем не нравится отсутствие возможности вывода цветного текста) или uart в putty (тут с цветным текстом нет проблем).
Логический анализатор saleae китайский клон, usb-uart переходник.
Tracealyzer для Freertos
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jul 3 2018, 14:34
Сообщение #13


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

Группа: Свой
Сообщений: 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 врод как за денежку. Не подскажете, есть на наших закромах "нежадная" версия?


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
k155la3
сообщение Jul 3 2018, 15:06
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



При работе с дебаггером :
Вместо отладочного printf - использую "log" breakpoint. (это не требует перекомпиляции, изменения кода, можно менять-переставлять BP во время отладки).
Для отладки в "жестком" реалтайме (таймеры, прерывания, RTOS) - ногодрыг, выводимый на осцилограф с лог.анализатор или ЛА Saleae.
Критерий правильности софта - когда debug и release версии работают одинаково. Опции оптимизации - по необходимости, но когда после их изменения что-то перестает работать - стараюсь разобраться в причине.
JTAG экономит много времени и невров.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jul 3 2018, 16:59
Сообщение #15


Ally
******

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



Цитата(haker_fox @ Jul 3 2018, 17:34) *
ВО! Точно, давно о них знаю, но всё никак не попробовал.

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

Но консоль сама по себе довольно устаревший подход.
Я тут в инетах видел гуляет микриумовский uC/Probe.
Правда сам не пробовал, у меня есть неплохой аналог, но за такими штуками будущее отладки.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th April 2024 - 04:09
Рейтинг@Mail.ru


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