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

preview_player
Показать описание
В ролике дается краткий обзор средств отладки микроконтроллеров построенных на ядре ARM Cortex, а также рассказывается о нестандартных приемах в отладке. В частности затрагиваются вопросы отладки быстротекущих процессов в операционной системе FreeRTOS

Вышла книга по операционной системе FreeRTOS.

------------------------------------------
Если вы хотите поддержать автора канала номер карты Сбер:
2202-2023-2480-4008
------------------------------------------
Рекомендации по теме
Комментарии
Автор

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

victorlowlevel
Автор

Воу! Метки времени за счёт ЦАП — это суперская идея! Спасибо большое! Плюс в копилку знаний)

foxanderson
Автор

Интересно рассказываете, доступно. Уже 3 года смотрю ваши видео.

naitalar
Автор

О, спасибо. Как-то не приходило пока в голову DAC так использовать.

bytheway
Автор

Микроконтроллер с DMA может быть сам себе осциллографом. Для этого вам понадобится свободный таймер, свободный канал DMA, связанный с этим таймером и от одного килобайта свободный кусок ОЗУ. Запускаем таймер так, чтобы он дергал DMA через каждые 8 или больше тактов. Запускаем DMA так, чтобы он читал GPIO или, например, SPI_SR или USART_ISR. Ожидаем завершения работы DMA или просто делаем паузу и получаем массив из 1K значений. Далее, если в устройстве есть дисплей, можно данные вывести на него, если нет дисплея - скопировать данные в окне отладчика, вставить в excel, и построить графики в excel. А ещё, от одного таймера можно дергать сразу несколько каналов DMA и строить сразу несколько графиков GPIO и внутренних регистров флагов разных интерфейсов.

pavelboboshkin
Автор

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

bigbani
Автор

SWO/UART относительно медленные, поэтому применяю в основном для вывода "медленных" данных. А если что-то быстрое нужно проконтролировать не затрагивая работу контроллера, вот тогда приходится дергать свободными пинами. А если в контроллере нет DAC, тогда приходится изворачиваться используя несколько пинов.

GennPen
Автор

Спасибо за очередной приём.
Только как вы правильно заметили он поможет только если к устройству нельзя подключиться обычным дебагером.
А там, в том же кейле с стандартным ст-линком можно смотреть как на время в прерывании, так и время в задаче.

alexorlovecky
Автор

Интересный подход. Хотя я бы задачу определения времени работы тредов сделал бы проще: завел бы массив счетчиков для каждого треда. Когда тред получает управление он инкрементирует свой счетчик.
Если же время работы тредов может отличаться, то массив счетчиков инкрементирует таймер, по указателю, который ему подсовывает получивший управление тред.
По нажатию кнопки, или через заданное время, собранная статистика передается через UART, можно уже даже в обработанном виде, например в процентах времени для каждого треда.

Andrey-None
Автор

Владимир спасибо за инфу. Я дёргаю ножку МК с прерывании системного таймера. А по задачам другие ножки МК. И см осциллографов. Кому сколько времени нужно.

NIKOLAY_PSHONIA
Автор

Все уже придумано до нас. Есть такой инструмент, как Segger SystemView. Он фактически делает то же самое, но с очень крутой визуализацией и с расшифровкой каждой задачи. Просто открываешь полученные данные в программе и анализируешь. Для того, чтобы такие данные получить нуно предварительно в программе расставить вызов определенных функций. После этого, после запуска программы получите стрим данных, которые потом можно удобно визуализировать и анализировать.

chipsoft
Автор

Спасибо за видео, в случае AVR намигался светолмодиками, как вспомнишь...)))

SevenNightdreemVeryPavlovny
Автор

Использовал всегда, так называемый, пинодрыг. Для вывода относительно медленных данных использую уарт или у меня в проекте везде CAN используется, в CAN выпуливаю

SerB-Radio
Автор

Рейтинг методов отладки по моему опыту:
1) UART/SWO - самый маловносящий погрешности из информативных. Если нет SWO (а он бывает только на Cortex M4 и выше) и скорость UART настроить выше не получается, то можно использовать ногодрыг на ассемблерном макросе. На stm-ках можно таким образом добиться скорости вывода 2 МБит/с (частота дрыганья 2 МГц). Главное тут компилировать библиотеку microlib с отключением плавающей точки в printf функциях и использовать sniprintf(самая быстрая).
2) SWD - очень информативно, но полностью стопорит выполнение. Тут все понятно. Иногда может пригодиться заглянуть в регистры, но весьма редко.
3) GPIO ногодрыг, описываемый в видео - самый маловносящий погрешности в исполнение программы, но самый малоинформативный. Весьма полезная вещь для измерения времени выполнения и регистрации событий типа да/нет. Но выдает слишком мало информации.

mrcocok
Автор

Очень познавательно. Спасибо. А не пора ли сдвигаться в сторону GD32, например?

МихаилТиунов-сд
Автор

Владимир спасибо за видео. В документации от arm/st я находил информацию что сейчас использовать swo это слишком накладно из-за дополнительной ножки и они рекомендуют делать форматный вывод через etm - у вас нет информации что это и как работает?

projectlotus
Автор

Вспомнилась мелодия из фильма про инопланетян. :-)

vernnms
Автор

Насколько я помню - DAC только в старших линейках STM появляется. Штука редкая.
Спасибо за видео!

Олег-ити
Автор

Жаль что вы не упомянули про STM32CubeMonitor это супер инструмент не надо не единой дополнительной строчки кода писать ни чего подобного еще ни где не видел. Еще можно отлаживать по MODBUS как в промышленных ПЛК.

DIY_PLC
Автор

В Keil можно в реал-тайм видеть значение регистров и менять их как захочешь, а в других, например, Cube IDE - так нельзя! Ещё надо останавливать приложение, чтобы посмотреть, что в регистрах :((( Ай :((((

alexsv