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

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

Vladimir Medintsev

Vladimir Medintsev

Күн бұрын

Пікірлер: 66
@victorlowlevel8063
@victorlowlevel8063 2 жыл бұрын
А я очень часто использую "пины-маркеры"... Выделяю пару ножек - назначаю их выходами и дёргаю в нужных местах, контроллируя китайским логическим анализатором, за не имением осциллографа. Это позволяет отладить очень быстротекущие процессы - например на прерываниях таймеров, прерываниях EXTI, и прочих прервваниях, последовательности действий на различных фазах работы таймеров, замерять время выполнения кусочков кода - взводя пин на начало иследуемого кусочка кода и гася его в конце исполняемого кусочка кода. У этого метода конечно есть недостаток - нужно иметь свободные пины. Ну если их нет - можно использовать часть пинов, отняв их у неиспользуемой перефирии на момент отладки данного кусочка кода или модуля. При допустимости их даже можно вынести на плату как котрольные точки для подключения осцилла или лог-анализатора - если устройство не массовое.
@VladimirMedintsev
@VladimirMedintsev 2 жыл бұрын
Да, очень хороший прием.
@sozdatelEd
@sozdatelEd 2 жыл бұрын
👍большинство проектов так и отлаживаю. Осциллограф и пара ножек на МК самый быстрый метод понимания как быстро и корректно откликается контроллер на какие-то входные сигналы. В общем ещё с программирования pic-контроллеров этот метод использую.
@VladimirMedintsev
@VladimirMedintsev 2 жыл бұрын
@@sozdatelEd надо это стандартизовать сделав пин-маркерный интерфейс.
@Ironium_555
@Ironium_555 2 жыл бұрын
ага, такую же технологию еще на Атмелях применял, в 2000-х, в качестве логического анализатора использовал Омегу
@BalabayUA
@BalabayUA 2 жыл бұрын
👍 Аналогично, 3 КТ и китайский логический анализатор помогли определить что нужно поменять приоритеты прерываний USB и TIM3. Плюс увидел тайминги выполнения кода. Удобно. Хотя для таймингов есть код измерения и вывода через SWO, но анализатором всё намного наглядней, особенно если сбой проявляется раз в десяток секунд
@naitalar3390
@naitalar3390 11 ай бұрын
Интересно рассказываете, доступно. Уже 3 года смотрю ваши видео.
@VladimirMedintsev
@VladimirMedintsev 11 ай бұрын
Спасибо
@foxanderson7674
@foxanderson7674 2 жыл бұрын
Воу! Метки времени за счёт ЦАП - это суперская идея! Спасибо большое! Плюс в копилку знаний)
@bigbani1334
@bigbani1334 2 жыл бұрын
Ещё из нестандартной отладки открыл для себя довольно удобный способ - сдвиговый регистр. Стоит копейки, имеет бешеное быстродействие, и, при использовании шины SPI, требует лишь один дополнительный вывод. Можно использовать как для относительно медленных процессов (зажечь светодиод, если нужная периферия инициализировалась корректно), так и для более быстрых, подключив логический анализатор.
@pavelboboshkin3898
@pavelboboshkin3898 2 жыл бұрын
Микроконтроллер с DMA может быть сам себе осциллографом. Для этого вам понадобится свободный таймер, свободный канал DMA, связанный с этим таймером и от одного килобайта свободный кусок ОЗУ. Запускаем таймер так, чтобы он дергал DMA через каждые 8 или больше тактов. Запускаем DMA так, чтобы он читал GPIO или, например, SPI_SR или USART_ISR. Ожидаем завершения работы DMA или просто делаем паузу и получаем массив из 1K значений. Далее, если в устройстве есть дисплей, можно данные вывести на него, если нет дисплея - скопировать данные в окне отладчика, вставить в excel, и построить графики в excel. А ещё, от одного таймера можно дергать сразу несколько каналов DMA и строить сразу несколько графиков GPIO и внутренних регистров флагов разных интерфейсов.
@bytheway7
@bytheway7 2 жыл бұрын
О, спасибо. Как-то не приходило пока в голову DAC так использовать.
@alexorlovecky6662
@alexorlovecky6662 2 жыл бұрын
Спасибо за очередной приём. Только как вы правильно заметили он поможет только если к устройству нельзя подключиться обычным дебагером. А там, в том же кейле с стандартным ст-линком можно смотреть как на время в прерывании, так и время в задаче.
@GennPen
@GennPen 2 жыл бұрын
SWO/UART относительно медленные, поэтому применяю в основном для вывода "медленных" данных. А если что-то быстрое нужно проконтролировать не затрагивая работу контроллера, вот тогда приходится дергать свободными пинами. А если в контроллере нет DAC, тогда приходится изворачиваться используя несколько пинов.
@Andrey-None
@Andrey-None 2 жыл бұрын
Интересный подход. Хотя я бы задачу определения времени работы тредов сделал бы проще: завел бы массив счетчиков для каждого треда. Когда тред получает управление он инкрементирует свой счетчик. Если же время работы тредов может отличаться, то массив счетчиков инкрементирует таймер, по указателю, который ему подсовывает получивший управление тред. По нажатию кнопки, или через заданное время, собранная статистика передается через UART, можно уже даже в обработанном виде, например в процентах времени для каждого треда.
@SevenNightdreemVeryPavlovny
@SevenNightdreemVeryPavlovny 2 жыл бұрын
Спасибо за видео, в случае AVR намигался светолмодиками, как вспомнишь...)))
@easystm6865
@easystm6865 2 жыл бұрын
А ловко вы это придумали
@mrcocok4126
@mrcocok4126 2 жыл бұрын
Рейтинг методов отладки по моему опыту: 1) UART/SWO - самый маловносящий погрешности из информативных. Если нет SWO (а он бывает только на Cortex M4 и выше) и скорость UART настроить выше не получается, то можно использовать ногодрыг на ассемблерном макросе. На stm-ках можно таким образом добиться скорости вывода 2 МБит/с (частота дрыганья 2 МГц). Главное тут компилировать библиотеку microlib с отключением плавающей точки в printf функциях и использовать sniprintf(самая быстрая). 2) SWD - очень информативно, но полностью стопорит выполнение. Тут все понятно. Иногда может пригодиться заглянуть в регистры, но весьма редко. 3) GPIO ногодрыг, описываемый в видео - самый маловносящий погрешности в исполнение программы, но самый малоинформативный. Весьма полезная вещь для измерения времени выполнения и регистрации событий типа да/нет. Но выдает слишком мало информации.
@SerB-Radio
@SerB-Radio 2 жыл бұрын
Использовал всегда, так называемый, пинодрыг. Для вывода относительно медленных данных использую уарт или у меня в проекте везде CAN используется, в CAN выпуливаю
@chipsoft1
@chipsoft1 2 жыл бұрын
Все уже придумано до нас. Есть такой инструмент, как Segger SystemView. Он фактически делает то же самое, но с очень крутой визуализацией и с расшифровкой каждой задачи. Просто открываешь полученные данные в программе и анализируешь. Для того, чтобы такие данные получить нуно предварительно в программе расставить вызов определенных функций. После этого, после запуска программы получите стрим данных, которые потом можно удобно визуализировать и анализировать.
@GennPen
@GennPen 2 жыл бұрын
Посмотрел, крутая штука. Он только для OS или без нее тоже можно использовать?
@chipsoft1
@chipsoft1 2 жыл бұрын
@@GennPen Без OS тоже можно использовать, например если нужно визуализировать вызовы прерываний
@GennPen
@GennPen 2 жыл бұрын
@@chipsoft1 Спасибо, нужно будет поковырять на досуге.
@NIKOLAY_PSHONIA
@NIKOLAY_PSHONIA 2 жыл бұрын
Владимир спасибо за инфу. Я дёргаю ножку МК с прерывании системного таймера. А по задачам другие ножки МК. И см осциллографов. Кому сколько времени нужно.
@Олег-и7т1и
@Олег-и7т1и 2 жыл бұрын
Насколько я помню - DAC только в старших линейках STM появляется. Штука редкая. Спасибо за видео!
@ogurezzz
@ogurezzz 2 жыл бұрын
G0 серия это практически самая младшая линейка (Cortex-M0+), младше нее только F0. Но уже на G0B0 и G051 уже есть DAC.
@vernnms78
@vernnms78 2 жыл бұрын
Вспомнилась мелодия из фильма про инопланетян. :-)
@МихаилТиунов-с7д
@МихаилТиунов-с7д 2 жыл бұрын
Очень познавательно. Спасибо. А не пора ли сдвигаться в сторону GD32, например?
@VladimirMedintsev
@VladimirMedintsev 2 жыл бұрын
А зачем, в мелкосерийке по прежнему доступен STM.
@victorlowlevel8063
@victorlowlevel8063 2 жыл бұрын
А чем GD32 в корне отличается от STM32? Я пробовал перепрошить одно устройство GD32F105xx - и даже была доступна отладка через SWD... Устройство это - китайская плата бегущей строки. Я там даже умудрился запустить пинг используя драйвер LAN на плате и стек Ethernet из куба... Плату затачивал под свои нужды - писал обменку для валют с управлением от ИК-пульта, отреверсив и вызвонив пины. Эти платы дешевле, чем сделать самим с нуля. Ничо не надо покупать и паять. Разве что хедер под программатор. Там уже и микруха часов есть с батарейкой и флешка на пару мегабайт W25Qxx... Просто купил... Залил свой код, допаял датчиков и в путь!
@projectlotus5815
@projectlotus5815 2 жыл бұрын
Владимир спасибо за видео. В документации от arm/st я находил информацию что сейчас использовать swo это слишком накладно из-за дополнительной ножки и они рекомендуют делать форматный вывод через etm - у вас нет информации что это и как работает?
@VladimirMedintsev
@VladimirMedintsev 2 жыл бұрын
Embedded Trace Macrocell это в современных кортексах есть такое в ядре. Реально можно использовать. Но только если я не ошибаюсь там в ETM ножек много используется.
@MrCrossRaccoon
@MrCrossRaccoon 2 жыл бұрын
Спасибо
@ajajapenoflex
@ajajapenoflex 2 жыл бұрын
наглядно получилось
@TwentyNine97
@TwentyNine97 2 жыл бұрын
В рекламе GB вы свой номер засветили🤫
@VladimirMedintsev
@VladimirMedintsev 2 жыл бұрын
Начиная со следующей недели мой номер телефона будет красоваться под каждым видео. Я его в следующем видео буду всем в явном виде предлагать.
@TwentyNine97
@TwentyNine97 2 жыл бұрын
@@VladimirMedintsev ууу, спамом завалят. Вы отважный😎
@VladimirMedintsev
@VladimirMedintsev 2 жыл бұрын
Нет, не завалят. Мой телефон уже лет 10 можно спокойно в запросе яндекса найти. И пока не завалили.
@serggorod1423
@serggorod1423 2 жыл бұрын
Good job 👍
@ViacheslavMezentsev
@ViacheslavMezentsev 2 жыл бұрын
Для высокоуровневой отладки существует ещё такая библиотека, как LibP7. Есть статья на Хабре с описанием как её подключить и это немного сложновато, зато действительно работает. Может дойдут руки и я покажу как настроить окружение разработчика для её использования. Сам я её использовал для передачи телеметрии с контроллера по UDP. На ПК есть готовая программа для приёма этой телеметрии (Linux+Windows). Можно как графики рисовать, так и в журнале события регистрировать. Локальный интерфейс телеметрии может быть любой, только потом данные на компе всё равно нужно транслировать по сети. Поэтому в комплекте к LibP7 есть примеры, в т.ч. программы-прокси на этот случай.
@VladimirMedintsev
@VladimirMedintsev 2 жыл бұрын
Не уверен что это удобно еще и библиотеку пихать в микроконтроллер. Смысл отладки в том, чтобы не мешать и не искажать работу основной программы, а вы предлагаете еще и ethernet туда запихать... Весьма спорное предложение. Оно может работать если говорить о мониторинге, но вот отладка точно зашквар.
@VladimirMedintsev
@VladimirMedintsev 2 жыл бұрын
А ну так и есть LibP7 это не отладка. Это логирование и телеметрия.
@ViacheslavMezentsev
@ViacheslavMezentsev 2 жыл бұрын
@@VladimirMedintsev Никто не мешает использовать LibP7 поверх UART'а. Это дело пользователя как поток байт передавать на ПК. Можно сказать, что RTT тоже не отладка и там тоже требуется код поддержки. Точно такой же код требуется для LibP7, который "упаковывает" данные, минимизируя трафик. UDP (uIP) я использовал, потому что он был и он быстрее UART'а. Достоинство в том, что всё отладочное ПО для ПК уже написано. В этом основная проблема, когда занимаешься отладкой - удобство при разборе отладочных данных. Можно, конечно, и осциллографом смотреть, но не всегда это удобно.
@alexsv1834
@alexsv1834 2 жыл бұрын
В Keil можно в реал-тайм видеть значение регистров и менять их как захочешь, а в других, например, Cube IDE - так нельзя! Ещё надо останавливать приложение, чтобы посмотреть, что в регистрах :((( Ай :((((
@easystm6865
@easystm6865 2 жыл бұрын
Можно ещё CubeMonitor использовать, чтобы видеть значения переменных в реальном времени
@alexsv1834
@alexsv1834 2 жыл бұрын
@@easystm6865 я не знал про такое. Погуглил - вроде бы прилично выглядит. Надо попробовать. Спасибо!
@VladimirMedintsev
@VladimirMedintsev 2 жыл бұрын
@@alexsv1834 Я CubeMonitor уже не один раз показывал. kzbin.info/www/bejne/p3jVfYdvbtCtmMk
@alexsv1834
@alexsv1834 2 жыл бұрын
@@VladimirMedintsev извините :(( не видел :((
@kon-stan-tin
@kon-stan-tin 2 жыл бұрын
В обычном CubeIDE тоже можно наблюдать за значениями переменных в реальном времени если их добавить в закладке "Live Expressions".
@DIY_PLC
@DIY_PLC 2 жыл бұрын
Жаль что вы не упомянули про STM32CubeMonitor это супер инструмент не надо не единой дополнительной строчки кода писать ни чего подобного еще ни где не видел. Еще можно отлаживать по MODBUS как в промышленных ПЛК.
@VladimirMedintsev
@VladimirMedintsev 2 жыл бұрын
Про CubeMonitor я снимал даже несколько видео, но в данном контексте он совсем не в тему, он работает по SWD, а про этот интерфейс я подробно говорил. Тут видео посвящено другому.
@DIY_PLC
@DIY_PLC 2 жыл бұрын
@@VladimirMedintsev А есть еще STMStudio для отладки.
@goiiia3774
@goiiia3774 2 жыл бұрын
Ну или мигать светодиодиком на ардуинке )
@negodiaysamsonoff9616
@negodiaysamsonoff9616 2 жыл бұрын
а если нет осциллографа - можно звуком. только б с ума потом не сойти
@VladimirMedintsev
@VladimirMedintsev 2 жыл бұрын
Шикарно, надо послушать!
@gunnargunaxe
@gunnargunaxe 2 жыл бұрын
Отладка через ЦАП... Мдаааа😅
@ЕвгенийСахаров-щ6ю
@ЕвгенийСахаров-щ6ю 2 жыл бұрын
Ни х@я не понятно но очень интересно
@СергейРыляков
@СергейРыляков 2 жыл бұрын
День добрый. Пытаюсь начать работать с stm32 и сразу же столкнулся с проблемой. При попытке "debug" в TrueStudio появляется уведомление После нажатия на "OK" уведомление пропадает, но при попытке загрузить в плату программу вылетает ошибка Даже голый проект (без моего кода)после st32cubemx не работает. Не подскажете, что делать. Плату пытаюсь прошить St-Link v2. Драйвера обновлённые.
@VladimirMedintsev
@VladimirMedintsev 2 жыл бұрын
Среда не видит ваш программатор. Вам необходимо воспользоваться инструкцией на TrueStudio и правильно настроить среду программирования.
@VladimirMedintsev
@VladimirMedintsev 2 жыл бұрын
Она в сообщении об ошибке даже пишет что именно не может сделать. Т.е. у вас проблемы не с кодом и не с продуктами STM. У вас проблемы со средой программирования.
@СергейРыляков
@СергейРыляков 2 жыл бұрын
@@VladimirMedintsev Спасибо. Хоть буду знать в каком направлении двигаться.
Quando A Diferença De Altura É Muito Grande 😲😂
00:12
Mari Maria
Рет қаралды 45 МЛН