haker_fox 60 3 июля, 2018 Опубликовано 3 июля, 2018 · Жалоба Добрый день, коллеги! Собственно говоря, вопрос в теме. Просьба поделиться, кто как отлаживает свои проекты, выполненные на микроконтроллерах. Ядро не принципиально, но лучше Cortex-M0/3/4(F). Почему возник вопрос? Раньше я не пользовался для отладки JTAGом. В не меньшей степени этому способствовали отзывы об этом инструменте уважаемого zltigo. Кто на форуме давно, тот поймёт. Поэтому я поднимал консольку. И работал с ней. Где было необходимо посмотреть вывод программы, добавлял свои версии printf. Либо махал лапками, с подключенным оциллографом. Потом, попробовав вкусности, предоставляемые JTAG, пользовался только им. При этом вывод в консоль стал если не вторым по приоритету, то точно на равне с отладчиком. Но вот проблема. Пользователю нужно отправлять программу с выставленными уровнями оптимизации (обычно balanced для IAR). Отладживать же программу с этим уровнем не всегда удобно, т.к. исчезают переменные, ветвления и даже функции. Т.е. возниакает предположение, что JTAG годится только для черновой и грубой отладки. Дальше поднимаем уровень оптимизации, и пользуемся printf'ом и подобными инструментами. Но как принтфом получить информацию, что, скажем содержится в регистрах ssp или dma модуля, как остановить программу в нужном месте и посмотреть переменные? Как отследить call stack? Уважаемый zltigo часто говорил, что ему хватает только консольки, и за отладчик он берётся только в особо сложных случаях. В общем я снова стал приходить к выводу, что отлаживаться через аппаратный отладчик - бесполезная затея. Нужно сразу выставлять уровень оптимизации на максимум, и использовать иные способы. В связи с этим у меня возникла определённая каша в голове, и захотелось услышать мнение коллег по этому вопросу? Возможно ли использовать что-то вместо JTAG при отладке, почти не уступающее ему по возможностям? Или может быть я вообще не тем путём иду? Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 192 3 июля, 2018 Опубликовано 3 июля, 2018 · Жалоба Отладживать же программу с этим уровнем не всегда удобно, т.к. исчезают переменные, ветвления и даже функции. А зачем, извините, отлаживать программу с включённой оптимизацией? :wacko: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 3 июля, 2018 Опубликовано 3 июля, 2018 · Жалоба А зачем, извините, отлаживать программу с включённой оптимизацией? :wacko: Потому что по мой опыт подсказывает, что программа с включенной оптимизацией может работать несколько по-другому. Банально, по причине изменившихся времён выполнения кода. Понимаю, что некорректное программирование. Но вот и надо отладить эти моменты. А по-этому и вижу целесообразность отлаживать сразу с оптимизацией. В общем хочется внешнего опыта по этому вопросу) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 133 3 июля, 2018 Опубликовано 3 июля, 2018 (изменено) · Жалоба Добрый день! Вопрос больше религиозный - кому что больше нравится. У себя я отлаживаю с помощью аппаратного отладчика, однако в программе всегда реализован механизм вывода статистики через консоль. Но как принтфом получить информацию, что, скажем содержится в регистрах ssp или dma модуля, как остановить программу в нужном месте и посмотреть переменные? Отладчик читает эту информацию ровно так же, как и программное чтение. Если Вы отладчиком прочитаете чувствительный к чтению регистр, программа и под дебаггером будет вести себя эпично-эпилепсично. Программу остановить можно, по крайней мере в Cortex-Mx, инструкцией программной точки останова BKPT + некое шаманство с регистрами отладчика (режим Halt вроде). Отказываться от отладчика, ИМХО, глупо. Ну а насчет отладки в оптимизированных программах - то, как было сказано выше, это бесполезно (понятное дело, почему). Программа должна работать одинаково на любых уровнях оптимизации. Если это не так - это уже повод подсуетиться и посидеть денек над облагораживанием программы на предмет возможных скрытых багов. Оптимизатор не исправляет ошибки пользователя - он лишь жестче показывает программисту, где он не прав, на мой взгляд :laughing: Ну а для устройств, которые должны отлаживаться далеко за пределами моего рабочего стола - я веду систему логгирования всего и вся на внутренний накопитель и при возникновении проблем - требую .log файл сессии, где уже с ним в поте лица сижу и думаю "шо цэ такое было". Осциллографом и лапкой МК смотрю обычно правильность настройки частоты этого МК по таймерам. Светодиодов пару всегда на устройствах ставлю - это дэ-факто. Ну а насчет call stack - программно тоже можно сделать, достаточно проанализировать состояние CPU и содержимое стека. Изменено 3 июля, 2018 пользователем Arlleex Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 40 3 июля, 2018 Опубликовано 3 июля, 2018 · Жалоба Jlink (SWD) + RTT Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kolobok0 0 3 июля, 2018 Опубликовано 3 июля, 2018 · Жалоба ..Вопрос больше религиозный - кому что больше нравится.... предлагаю перевести в плоскость "какие существуют" или "какие юзали-знаете"... у мну зависило от задачи, камня, возможностей(читай лапок). ногодрыг (осцил, светодиодик), jtag отладка, в лог файл (конфигурирование из ini файла) не юзал, но на мой взгляд заслуживают внимания: - по сети (если проект поддерживает сеть) так-же интересен подход в 1 пин (делается декодер на скорострельной плисине), делается код на сях (разница нолика от единички - в один ноп) и всё...достаточно шустро и не зависит от тактовой... так-же нужно упомянуть про средства ловли hardfault. на обработчик вещаем добычу всей инфы до какой дотянемся (регистры, стэк, затирка стэка, состояние-прохождение контрольных точек если есть) и пишем во флэш. далее при старте считываем(если была запись) из флэша и пишем цивильно в систему логирования. как то так... (круглый) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 3 июля, 2018 Опубликовано 3 июля, 2018 · Жалоба Пользователю нужно отправлять программу с выставленными уровнями оптимизации (обычно balanced для IAR). Интересное ограничение. Откуда взялся такой привередливый пользователь? Прямо так и говорит: "включайте оптимизацию, адназначна"? :wacko: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 3 июля, 2018 Опубликовано 3 июля, 2018 · Жалоба Коллеги, спасибо! Я не собираюсь отказываться от отладчика. Просто интересно было услышать какие есть альтернативы ему кроме тех, которые мне известны. Обработчики на hardfault, stack overflow и out of heap у меня есть. Также использую configASSERT (из FreeRTOS). В eeprom пижу журнал на 20 событий, прямо текстом в случае наступления этих событий. EEPROM находится внутри МК, поэтому доступ к ней 100%, даже в обход штатных драйверов под управлением оси. Помогает видеть статистику сбоев. Интересное ограничение. Откуда взялся такой привередливый пользователь? Прямо так и говорит: "включайте оптимизацию, адназначна"? :wacko: Если это стёб, то как принято сейчас говорить очень толсто!. Я ничего не говорил о требованиях пользователя. Но я сказал, что пользователю требуется отправлять. По нашим внутренним требованиям. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 3 июля, 2018 Опубликовано 3 июля, 2018 · Жалоба Конкретно поинт про ненужность дебагера у злтиго считаю снобским и вредным. Он работает для самого злтиго и 5% таких же как он. А его попытка убедить всех что его рецепт применим для всех, а если пользуешься дебагером то "нипрограмист" откровенна вредна. Спустя десятки лет набитых шишок десятки схожих задач и проектоа, возможно дебагер и правда будет не нужен, но это значит только то что человек которому не нужен дебагер вошел таки в эти 5%. Для чувствительных ко времени и плавающих багов, вначале ищу примерное место с браком. Потом добавляю туда бинарный логер, который никуда не выводит данные, а тихонько их накапливает в буфер. В некритичные моменты времени проверяю буфер на наличие признаков ошибочности. При наличии обычно bkpt и уже курю результат на паузе. Интересное ограничение. Откуда взялся такой привередливый пользователь? Прямо так и говорит: "включайте оптимизацию, адназначна"? :wacko: Очень правильный пользователь, которых хочет отсечь бракоделов с UB. Высокий уровень оптимизации хорошо выявляет таких "индусов". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 3 июля, 2018 Опубликовано 3 июля, 2018 · Жалоба Конкретно этот поинт У меня есть предложение, давайте говорить либо на чистом английском, если вы умеете, а не на кальке, либо на русском :rolleyes: 5 минут вчитывался в слово, и думал, вы допустили опечатку :rolleyes: это значит только то что человек которому не нужен дебагер вошел таки в эти 5%. Понятно, у меня примерно такие же измышления. При наличии обычно bkpt и уже курю результат на паузе. Это уже интересно. Т.е. ассемблерная вставка (или макрос) с командой. Но, получается, что JTAG должен быть подключен. Очень правильный пользователь, которых хочет отсечь бракоделов с UB. Высокий уровень оптимизации хорошо выявляет "индусов". Давайте будем жить реалиями. Большая часть пользователей вообще не разбирается в программировании. И оптимизация делается не для них, а по причине того, что прошивка должна войти в строго ограниченный объём флешки. Зачем это делается - говорить не буду. Но кто в теме, догадается))) Высокий уровень оптимизации хорошо выявляет "индусов". Прежде всего это для собственного (я про себя) самолюбия и гордости. Без иронии. Ну, и посольку, я не один проект выполняю, мнение коллег тоже учитывается. Кстати, отладчик не очень помогает, когда снаружи микроконтроллера висит железка, дающая этак 8 кГц на ногу прерываний, по прерываниям запускаются транзакции DMA и т.п. В момент остановки отладчиком, обычно выпадаем в ошибку DMA, или сразу после возобновления выполнения ПО. Т.к. потеряна синхронизации пакетов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 3 июля, 2018 Опубликовано 3 июля, 2018 · Жалоба Собственно говоря, вопрос в теме. Просьба поделиться, кто как отлаживает свои проекты, выполненные на микроконтроллерах. Ядро не принципиально, но лучше Cortex-M0/3/4(F). Почему возник вопрос? Раньше я не пользовался для отладки JTAGом. В не меньшей степени этому способствовали отзывы об этом инструменте уважаемого zltigo. Кто на форуме давно, тот поймёт. Да что-то давно не слышно zltigo. Его искрометный сарказм здОрово веселил в былые времена. С тех пор мало что изменилось в отладке. Ну вот я стал ставить RGB светодиоды. Эт честно был прорыв в нашей сфере. Конкуренты увяли. Они лепили кастомные платы, ставили туда десяточек одноцветных диодов и преподносили это как великолепную диагностическую панель. А мы повесили дешевую RGB ленту и вывели на нее сотни! диагностических сигналов. Ну надписали их конечно. Один взгляд и практически сразу ясно что случилось с системой. Откуда собственно и растут ноги у этого проекта - https://habr.com/post/373027/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uriy 5 3 июля, 2018 Опубликовано 3 июля, 2018 · Жалоба Компилю сразу с включенной оптимизацией, если надо что-то отлаживать по шагам оптимизацию отключаю. Логи вывожу через RTT + китайский Jlink (правда мне в нем не нравится отсутствие возможности вывода цветного текста) или uart в putty (тут с цветным текстом нет проблем). Логический анализатор saleae китайский клон, usb-uart переходник. Tracealyzer для Freertos Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 3 июля, 2018 Опубликовано 3 июля, 2018 · Жалоба Да что-то давно не слышно zltigo. Да, без него скучно... И опыт у него огромный. Жаль, что исчез((( Логи вывожу через RTT Tracealyzer для Freertos ВО! Точно, давно о них знаю, но всё никак не попробовал. Как я понимаю, RTT абсолютно даром выкачивается с сеггера. А вот Traceanalyzer врод как за денежку. Не подскажете, есть на наших закромах "нежадная" версия? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 3 июля, 2018 Опубликовано 3 июля, 2018 · Жалоба При работе с дебаггером : Вместо отладочного printf - использую "log" breakpoint. (это не требует перекомпиляции, изменения кода, можно менять-переставлять BP во время отладки). Для отладки в "жестком" реалтайме (таймеры, прерывания, RTOS) - ногодрыг, выводимый на осцилограф с лог.анализатор или ЛА Saleae. Критерий правильности софта - когда debug и release версии работают одинаково. Опции оптимизации - по необходимости, но когда после их изменения что-то перестает работать - стараюсь разобраться в причине. JTAG экономит много времени и невров. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 3 июля, 2018 Опубликовано 3 июля, 2018 · Жалоба ВО! Точно, давно о них знаю, но всё никак не попробовал. RTT хорош когда у чипа нет вывода SWO. А так следует учесть, что консоль работающая по RTT сразу схлопывается если выключить режим отладки, скажем перейти в редактирование. Но консоль сама по себе довольно устаревший подход. Я тут в инетах видел гуляет микриумовский uC/Probe. Правда сам не пробовал, у меня есть неплохой аналог, но за такими штуками будущее отладки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться