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

  Рет қаралды 7,167

Vladimir Medintsev

Vladimir Medintsev

Жыл бұрын

В ролике дается краткий обзор средств отладки микроконтроллеров построенных на ядре ARM Cortex, а также рассказывается о нестандартных приемах в отладке. В частности затрагиваются вопросы отладки быстротекущих процессов в операционной системе FreeRTOS
Вышла книга по операционной системе FreeRTOS.
Видео о книге "FreeRTOS. Операционные системы микроконтроллеров" - • Книга "FreeRTOS. Опера...
Бумажная версия книги - electronics-krd.ru/magazin/pr...
Электронная версия книги - electronics-krd.ru/magazin/pr...
Оглавление книги - disk.yandex.ru/i/3ZKwKQTgQnlHoQ
Пример страниц - disk.yandex.ru/i/WCeD_CA3aMbiOQ
Группа в телеграмм - t.me/vladimir_medintsev
Код примеров из книги - disk.yandex.ru/d/Bqa2adpEZ3Mo6w
По вопросам сотрудничества - vmedintsev@yandex.ru
Канал в телеграмм - t.me/vladimir_medintsev
Канал на KZfaq - / vladimirmedintsev
------------------------------------------
Если вы хотите поддержать автора канала номер карты Сбер:
2202-2023-2480-4008
------------------------------------------

Пікірлер: 67
@naitalar3390
@naitalar3390 5 ай бұрын
Интересно рассказываете, доступно. Уже 3 года смотрю ваши видео.
@VladimirMedintsev
@VladimirMedintsev 5 ай бұрын
Спасибо
@victorlowlevel8063
@victorlowlevel8063 Жыл бұрын
А я очень часто использую "пины-маркеры"... Выделяю пару ножек - назначаю их выходами и дёргаю в нужных местах, контроллируя китайским логическим анализатором, за не имением осциллографа. Это позволяет отладить очень быстротекущие процессы - например на прерываниях таймеров, прерываниях EXTI, и прочих прервваниях, последовательности действий на различных фазах работы таймеров, замерять время выполнения кусочков кода - взводя пин на начало иследуемого кусочка кода и гася его в конце исполняемого кусочка кода. У этого метода конечно есть недостаток - нужно иметь свободные пины. Ну если их нет - можно использовать часть пинов, отняв их у неиспользуемой перефирии на момент отладки данного кусочка кода или модуля. При допустимости их даже можно вынести на плату как котрольные точки для подключения осцилла или лог-анализатора - если устройство не массовое.
@VladimirMedintsev
@VladimirMedintsev Жыл бұрын
Да, очень хороший прием.
@sozdatelEd
@sozdatelEd Жыл бұрын
👍большинство проектов так и отлаживаю. Осциллограф и пара ножек на МК самый быстрый метод понимания как быстро и корректно откликается контроллер на какие-то входные сигналы. В общем ещё с программирования pic-контроллеров этот метод использую.
@VladimirMedintsev
@VladimirMedintsev Жыл бұрын
@@sozdatelEd надо это стандартизовать сделав пин-маркерный интерфейс.
@dimontipper8599
@dimontipper8599 Жыл бұрын
ага, такую же технологию еще на Атмелях применял, в 2000-х, в качестве логического анализатора использовал Омегу
@BalabayUA
@BalabayUA Жыл бұрын
👍 Аналогично, 3 КТ и китайский логический анализатор помогли определить что нужно поменять приоритеты прерываний USB и TIM3. Плюс увидел тайминги выполнения кода. Удобно. Хотя для таймингов есть код измерения и вывода через SWO, но анализатором всё намного наглядней, особенно если сбой проявляется раз в десяток секунд
@foxanderson7674
@foxanderson7674 Жыл бұрын
Воу! Метки времени за счёт ЦАП - это суперская идея! Спасибо большое! Плюс в копилку знаний)
@bytheway7
@bytheway7 Жыл бұрын
О, спасибо. Как-то не приходило пока в голову DAC так использовать.
@GennPen
@GennPen Жыл бұрын
SWO/UART относительно медленные, поэтому применяю в основном для вывода "медленных" данных. А если что-то быстрое нужно проконтролировать не затрагивая работу контроллера, вот тогда приходится дергать свободными пинами. А если в контроллере нет DAC, тогда приходится изворачиваться используя несколько пинов.
@pavelboboshkin3898
@pavelboboshkin3898 Жыл бұрын
Микроконтроллер с DMA может быть сам себе осциллографом. Для этого вам понадобится свободный таймер, свободный канал DMA, связанный с этим таймером и от одного килобайта свободный кусок ОЗУ. Запускаем таймер так, чтобы он дергал DMA через каждые 8 или больше тактов. Запускаем DMA так, чтобы он читал GPIO или, например, SPI_SR или USART_ISR. Ожидаем завершения работы DMA или просто делаем паузу и получаем массив из 1K значений. Далее, если в устройстве есть дисплей, можно данные вывести на него, если нет дисплея - скопировать данные в окне отладчика, вставить в excel, и построить графики в excel. А ещё, от одного таймера можно дергать сразу несколько каналов DMA и строить сразу несколько графиков GPIO и внутренних регистров флагов разных интерфейсов.
@easystm6865
@easystm6865 Жыл бұрын
А ловко вы это придумали
@SevenNightdreemVeryPavlovny
@SevenNightdreemVeryPavlovny Жыл бұрын
Спасибо за видео, в случае AVR намигался светолмодиками, как вспомнишь...)))
@alexorlovecky6662
@alexorlovecky6662 Жыл бұрын
Спасибо за очередной приём. Только как вы правильно заметили он поможет только если к устройству нельзя подключиться обычным дебагером. А там, в том же кейле с стандартным ст-линком можно смотреть как на время в прерывании, так и время в задаче.
@user-mv9tc7xq4h
@user-mv9tc7xq4h Жыл бұрын
Интересный подход. Хотя я бы задачу определения времени работы тредов сделал бы проще: завел бы массив счетчиков для каждого треда. Когда тред получает управление он инкрементирует свой счетчик. Если же время работы тредов может отличаться, то массив счетчиков инкрементирует таймер, по указателю, который ему подсовывает получивший управление тред. По нажатию кнопки, или через заданное время, собранная статистика передается через UART, можно уже даже в обработанном виде, например в процентах времени для каждого треда.
@MrCrossRaccoon
@MrCrossRaccoon Жыл бұрын
Спасибо
@serggorod1423
@serggorod1423 Жыл бұрын
Good job 👍
@bigbani1334
@bigbani1334 Жыл бұрын
Ещё из нестандартной отладки открыл для себя довольно удобный способ - сдвиговый регистр. Стоит копейки, имеет бешеное быстродействие, и, при использовании шины SPI, требует лишь один дополнительный вывод. Можно использовать как для относительно медленных процессов (зажечь светодиод, если нужная периферия инициализировалась корректно), так и для более быстрых, подключив логический анализатор.
@ajajapenoflex
@ajajapenoflex Жыл бұрын
наглядно получилось
@vernnms78
@vernnms78 Жыл бұрын
Вспомнилась мелодия из фильма про инопланетян. :-)
@user-bp3hg9fu5t
@user-bp3hg9fu5t Жыл бұрын
Насколько я помню - DAC только в старших линейках STM появляется. Штука редкая. Спасибо за видео!
@ogurezzz
@ogurezzz Жыл бұрын
G0 серия это практически самая младшая линейка (Cortex-M0+), младше нее только F0. Но уже на G0B0 и G051 уже есть DAC.
@SerB-Radio
@SerB-Radio Жыл бұрын
Использовал всегда, так называемый, пинодрыг. Для вывода относительно медленных данных использую уарт или у меня в проекте везде CAN используется, в CAN выпуливаю
@mrcocok4126
@mrcocok4126 Жыл бұрын
Рейтинг методов отладки по моему опыту: 1) UART/SWO - самый маловносящий погрешности из информативных. Если нет SWO (а он бывает только на Cortex M4 и выше) и скорость UART настроить выше не получается, то можно использовать ногодрыг на ассемблерном макросе. На stm-ках можно таким образом добиться скорости вывода 2 МБит/с (частота дрыганья 2 МГц). Главное тут компилировать библиотеку microlib с отключением плавающей точки в printf функциях и использовать sniprintf(самая быстрая). 2) SWD - очень информативно, но полностью стопорит выполнение. Тут все понятно. Иногда может пригодиться заглянуть в регистры, но весьма редко. 3) GPIO ногодрыг, описываемый в видео - самый маловносящий погрешности в исполнение программы, но самый малоинформативный. Весьма полезная вещь для измерения времени выполнения и регистрации событий типа да/нет. Но выдает слишком мало информации.
@chipsoft1
@chipsoft1 Жыл бұрын
Все уже придумано до нас. Есть такой инструмент, как Segger SystemView. Он фактически делает то же самое, но с очень крутой визуализацией и с расшифровкой каждой задачи. Просто открываешь полученные данные в программе и анализируешь. Для того, чтобы такие данные получить нуно предварительно в программе расставить вызов определенных функций. После этого, после запуска программы получите стрим данных, которые потом можно удобно визуализировать и анализировать.
@GennPen
@GennPen Жыл бұрын
Посмотрел, крутая штука. Он только для OS или без нее тоже можно использовать?
@chipsoft1
@chipsoft1 Жыл бұрын
@@GennPen Без OS тоже можно использовать, например если нужно визуализировать вызовы прерываний
@GennPen
@GennPen Жыл бұрын
@@chipsoft1 Спасибо, нужно будет поковырять на досуге.
@NIKOLAY_PSHONIA
@NIKOLAY_PSHONIA Жыл бұрын
Владимир спасибо за инфу. Я дёргаю ножку МК с прерывании системного таймера. А по задачам другие ножки МК. И см осциллографов. Кому сколько времени нужно.
@projectlotus5815
@projectlotus5815 Жыл бұрын
Владимир спасибо за видео. В документации от arm/st я находил информацию что сейчас использовать swo это слишком накладно из-за дополнительной ножки и они рекомендуют делать форматный вывод через etm - у вас нет информации что это и как работает?
@VladimirMedintsev
@VladimirMedintsev Жыл бұрын
Embedded Trace Macrocell это в современных кортексах есть такое в ядре. Реально можно использовать. Но только если я не ошибаюсь там в ETM ножек много используется.
@user-je8oz6lh6w
@user-je8oz6lh6w Жыл бұрын
Очень познавательно. Спасибо. А не пора ли сдвигаться в сторону GD32, например?
@VladimirMedintsev
@VladimirMedintsev Жыл бұрын
А зачем, в мелкосерийке по прежнему доступен STM.
@victorlowlevel8063
@victorlowlevel8063 Жыл бұрын
А чем GD32 в корне отличается от STM32? Я пробовал перепрошить одно устройство GD32F105xx - и даже была доступна отладка через SWD... Устройство это - китайская плата бегущей строки. Я там даже умудрился запустить пинг используя драйвер LAN на плате и стек Ethernet из куба... Плату затачивал под свои нужды - писал обменку для валют с управлением от ИК-пульта, отреверсив и вызвонив пины. Эти платы дешевле, чем сделать самим с нуля. Ничо не надо покупать и паять. Разве что хедер под программатор. Там уже и микруха часов есть с батарейкой и флешка на пару мегабайт W25Qxx... Просто купил... Залил свой код, допаял датчиков и в путь!
@goiiia3774
@goiiia3774 Жыл бұрын
Ну или мигать светодиодиком на ардуинке )
@Nidvoraich
@Nidvoraich Жыл бұрын
Я тоже считаю, что SWO - далеко не всегда правильное решение
@ViacheslavMezentsev
@ViacheslavMezentsev Жыл бұрын
Для высокоуровневой отладки существует ещё такая библиотека, как LibP7. Есть статья на Хабре с описанием как её подключить и это немного сложновато, зато действительно работает. Может дойдут руки и я покажу как настроить окружение разработчика для её использования. Сам я её использовал для передачи телеметрии с контроллера по UDP. На ПК есть готовая программа для приёма этой телеметрии (Linux+Windows). Можно как графики рисовать, так и в журнале события регистрировать. Локальный интерфейс телеметрии может быть любой, только потом данные на компе всё равно нужно транслировать по сети. Поэтому в комплекте к LibP7 есть примеры, в т.ч. программы-прокси на этот случай.
@VladimirMedintsev
@VladimirMedintsev Жыл бұрын
Не уверен что это удобно еще и библиотеку пихать в микроконтроллер. Смысл отладки в том, чтобы не мешать и не искажать работу основной программы, а вы предлагаете еще и ethernet туда запихать... Весьма спорное предложение. Оно может работать если говорить о мониторинге, но вот отладка точно зашквар.
@VladimirMedintsev
@VladimirMedintsev Жыл бұрын
А ну так и есть LibP7 это не отладка. Это логирование и телеметрия.
@ViacheslavMezentsev
@ViacheslavMezentsev Жыл бұрын
@@VladimirMedintsev Никто не мешает использовать LibP7 поверх UART'а. Это дело пользователя как поток байт передавать на ПК. Можно сказать, что RTT тоже не отладка и там тоже требуется код поддержки. Точно такой же код требуется для LibP7, который "упаковывает" данные, минимизируя трафик. UDP (uIP) я использовал, потому что он был и он быстрее UART'а. Достоинство в том, что всё отладочное ПО для ПК уже написано. В этом основная проблема, когда занимаешься отладкой - удобство при разборе отладочных данных. Можно, конечно, и осциллографом смотреть, но не всегда это удобно.
@DIY_PLC
@DIY_PLC Жыл бұрын
Жаль что вы не упомянули про STM32CubeMonitor это супер инструмент не надо не единой дополнительной строчки кода писать ни чего подобного еще ни где не видел. Еще можно отлаживать по MODBUS как в промышленных ПЛК.
@VladimirMedintsev
@VladimirMedintsev Жыл бұрын
Про CubeMonitor я снимал даже несколько видео, но в данном контексте он совсем не в тему, он работает по SWD, а про этот интерфейс я подробно говорил. Тут видео посвящено другому.
@DIY_PLC
@DIY_PLC Жыл бұрын
@@VladimirMedintsev А есть еще STMStudio для отладки.
@TwentyNine97
@TwentyNine97 Жыл бұрын
В рекламе GB вы свой номер засветили🤫
@VladimirMedintsev
@VladimirMedintsev Жыл бұрын
Начиная со следующей недели мой номер телефона будет красоваться под каждым видео. Я его в следующем видео буду всем в явном виде предлагать.
@TwentyNine97
@TwentyNine97 Жыл бұрын
@@VladimirMedintsev ууу, спамом завалят. Вы отважный😎
@VladimirMedintsev
@VladimirMedintsev Жыл бұрын
Нет, не завалят. Мой телефон уже лет 10 можно спокойно в запросе яндекса найти. И пока не завалили.
@alexsv1834
@alexsv1834 Жыл бұрын
В Keil можно в реал-тайм видеть значение регистров и менять их как захочешь, а в других, например, Cube IDE - так нельзя! Ещё надо останавливать приложение, чтобы посмотреть, что в регистрах :((( Ай :((((
@easystm6865
@easystm6865 Жыл бұрын
Можно ещё CubeMonitor использовать, чтобы видеть значения переменных в реальном времени
@alexsv1834
@alexsv1834 Жыл бұрын
@@easystm6865 я не знал про такое. Погуглил - вроде бы прилично выглядит. Надо попробовать. Спасибо!
@VladimirMedintsev
@VladimirMedintsev Жыл бұрын
@@alexsv1834 Я CubeMonitor уже не один раз показывал. kzfaq.info/get/bejne/p62if7dqntHekps.html
@alexsv1834
@alexsv1834 Жыл бұрын
@@VladimirMedintsev извините :(( не видел :((
@kon-stan-tin
@kon-stan-tin Жыл бұрын
В обычном CubeIDE тоже можно наблюдать за значениями переменных в реальном времени если их добавить в закладке "Live Expressions".
@negodiaysamsonoff9616
@negodiaysamsonoff9616 Жыл бұрын
а если нет осциллографа - можно звуком. только б с ума потом не сойти
@VladimirMedintsev
@VladimirMedintsev Жыл бұрын
Шикарно, надо послушать!
@gunnargunaxe
@gunnargunaxe Жыл бұрын
Отладка через ЦАП... Мдаааа😅
@user-km3vl2ti4v
@user-km3vl2ti4v Жыл бұрын
Ни х@я не понятно но очень интересно
@user-mu1xd1zq6v
@user-mu1xd1zq6v Жыл бұрын
День добрый. Пытаюсь начать работать с stm32 и сразу же столкнулся с проблемой. При попытке "debug" в TrueStudio появляется уведомление После нажатия на "OK" уведомление пропадает, но при попытке загрузить в плату программу вылетает ошибка Даже голый проект (без моего кода)после st32cubemx не работает. Не подскажете, что делать. Плату пытаюсь прошить St-Link v2. Драйвера обновлённые.
@VladimirMedintsev
@VladimirMedintsev Жыл бұрын
Среда не видит ваш программатор. Вам необходимо воспользоваться инструкцией на TrueStudio и правильно настроить среду программирования.
@VladimirMedintsev
@VladimirMedintsev Жыл бұрын
Она в сообщении об ошибке даже пишет что именно не может сделать. Т.е. у вас проблемы не с кодом и не с продуктами STM. У вас проблемы со средой программирования.
@user-mu1xd1zq6v
@user-mu1xd1zq6v Жыл бұрын
@@VladimirMedintsev Спасибо. Хоть буду знать в каком направлении двигаться.
Vivaan  Tanya once again pranked Papa 🤣😇🤣
00:10
seema lamba
Рет қаралды 26 МЛН
Survival skills: A great idea with duct tape #survival #lifehacks #camping
00:27
We Got Expelled From Scholl After This...
00:10
Jojo Sim
Рет қаралды 75 МЛН
МАМА И STANDOFF 2 😳 !FAKE GUN! #shorts
00:34
INNA SERG
Рет қаралды 4,1 МЛН
STM32 Таймеры в режиме ШИМ. CMSIS
37:58
MBDLB
Рет қаралды 2,3 М.
STM32CubeIDE. Вывод printf без наличия SWO
15:03
NR.electronics
Рет қаралды 10 М.
Secret Wireless charger 😱 #shorts
0:28
Mr DegrEE
Рет қаралды 2,3 МЛН
Hisense Official Flagship Store Hisense is the champion What is going on?
0:11
Special Effects Funny 44
Рет қаралды 2,4 МЛН
Спутниковый телефон #обзор #товары
0:35
Product show
Рет қаралды 1,7 МЛН
Gizli Apple Watch Özelliği😱
0:14
Safak Novruz
Рет қаралды 4,8 МЛН
Собери ПК и Получи 10,000₽
1:00
build monsters
Рет қаралды 1,9 МЛН