А я очень часто использую "пины-маркеры"... Выделяю пару ножек - назначаю их выходами и дёргаю в нужных местах, контроллируя китайским логическим анализатором, за не имением осциллографа. Это позволяет отладить очень быстротекущие процессы - например на прерываниях таймеров, прерываниях EXTI, и прочих прервваниях, последовательности действий на различных фазах работы таймеров, замерять время выполнения кусочков кода - взводя пин на начало иследуемого кусочка кода и гася его в конце исполняемого кусочка кода. У этого метода конечно есть недостаток - нужно иметь свободные пины. Ну если их нет - можно использовать часть пинов, отняв их у неиспользуемой перефирии на момент отладки данного кусочка кода или модуля. При допустимости их даже можно вынести на плату как котрольные точки для подключения осцилла или лог-анализатора - если устройство не массовое.
@VladimirMedintsev2 жыл бұрын
Да, очень хороший прием.
@sozdatelEd2 жыл бұрын
👍большинство проектов так и отлаживаю. Осциллограф и пара ножек на МК самый быстрый метод понимания как быстро и корректно откликается контроллер на какие-то входные сигналы. В общем ещё с программирования pic-контроллеров этот метод использую.
@VladimirMedintsev2 жыл бұрын
@@sozdatelEd надо это стандартизовать сделав пин-маркерный интерфейс.
@Ironium_5552 жыл бұрын
ага, такую же технологию еще на Атмелях применял, в 2000-х, в качестве логического анализатора использовал Омегу
@BalabayUA2 жыл бұрын
👍 Аналогично, 3 КТ и китайский логический анализатор помогли определить что нужно поменять приоритеты прерываний USB и TIM3. Плюс увидел тайминги выполнения кода. Удобно. Хотя для таймингов есть код измерения и вывода через SWO, но анализатором всё намного наглядней, особенно если сбой проявляется раз в десяток секунд
@naitalar339011 ай бұрын
Интересно рассказываете, доступно. Уже 3 года смотрю ваши видео.
@VladimirMedintsev11 ай бұрын
Спасибо
@foxanderson76742 жыл бұрын
Воу! Метки времени за счёт ЦАП - это суперская идея! Спасибо большое! Плюс в копилку знаний)
@bigbani13342 жыл бұрын
Ещё из нестандартной отладки открыл для себя довольно удобный способ - сдвиговый регистр. Стоит копейки, имеет бешеное быстродействие, и, при использовании шины SPI, требует лишь один дополнительный вывод. Можно использовать как для относительно медленных процессов (зажечь светодиод, если нужная периферия инициализировалась корректно), так и для более быстрых, подключив логический анализатор.
@pavelboboshkin38982 жыл бұрын
Микроконтроллер с DMA может быть сам себе осциллографом. Для этого вам понадобится свободный таймер, свободный канал DMA, связанный с этим таймером и от одного килобайта свободный кусок ОЗУ. Запускаем таймер так, чтобы он дергал DMA через каждые 8 или больше тактов. Запускаем DMA так, чтобы он читал GPIO или, например, SPI_SR или USART_ISR. Ожидаем завершения работы DMA или просто делаем паузу и получаем массив из 1K значений. Далее, если в устройстве есть дисплей, можно данные вывести на него, если нет дисплея - скопировать данные в окне отладчика, вставить в excel, и построить графики в excel. А ещё, от одного таймера можно дергать сразу несколько каналов DMA и строить сразу несколько графиков GPIO и внутренних регистров флагов разных интерфейсов.
@bytheway72 жыл бұрын
О, спасибо. Как-то не приходило пока в голову DAC так использовать.
@alexorlovecky66622 жыл бұрын
Спасибо за очередной приём. Только как вы правильно заметили он поможет только если к устройству нельзя подключиться обычным дебагером. А там, в том же кейле с стандартным ст-линком можно смотреть как на время в прерывании, так и время в задаче.
@GennPen2 жыл бұрын
SWO/UART относительно медленные, поэтому применяю в основном для вывода "медленных" данных. А если что-то быстрое нужно проконтролировать не затрагивая работу контроллера, вот тогда приходится дергать свободными пинами. А если в контроллере нет DAC, тогда приходится изворачиваться используя несколько пинов.
@Andrey-None2 жыл бұрын
Интересный подход. Хотя я бы задачу определения времени работы тредов сделал бы проще: завел бы массив счетчиков для каждого треда. Когда тред получает управление он инкрементирует свой счетчик. Если же время работы тредов может отличаться, то массив счетчиков инкрементирует таймер, по указателю, который ему подсовывает получивший управление тред. По нажатию кнопки, или через заданное время, собранная статистика передается через UART, можно уже даже в обработанном виде, например в процентах времени для каждого треда.
@SevenNightdreemVeryPavlovny2 жыл бұрын
Спасибо за видео, в случае AVR намигался светолмодиками, как вспомнишь...)))
@easystm68652 жыл бұрын
А ловко вы это придумали
@mrcocok41262 жыл бұрын
Рейтинг методов отладки по моему опыту: 1) UART/SWO - самый маловносящий погрешности из информативных. Если нет SWO (а он бывает только на Cortex M4 и выше) и скорость UART настроить выше не получается, то можно использовать ногодрыг на ассемблерном макросе. На stm-ках можно таким образом добиться скорости вывода 2 МБит/с (частота дрыганья 2 МГц). Главное тут компилировать библиотеку microlib с отключением плавающей точки в printf функциях и использовать sniprintf(самая быстрая). 2) SWD - очень информативно, но полностью стопорит выполнение. Тут все понятно. Иногда может пригодиться заглянуть в регистры, но весьма редко. 3) GPIO ногодрыг, описываемый в видео - самый маловносящий погрешности в исполнение программы, но самый малоинформативный. Весьма полезная вещь для измерения времени выполнения и регистрации событий типа да/нет. Но выдает слишком мало информации.
@SerB-Radio2 жыл бұрын
Использовал всегда, так называемый, пинодрыг. Для вывода относительно медленных данных использую уарт или у меня в проекте везде CAN используется, в CAN выпуливаю
@chipsoft12 жыл бұрын
Все уже придумано до нас. Есть такой инструмент, как Segger SystemView. Он фактически делает то же самое, но с очень крутой визуализацией и с расшифровкой каждой задачи. Просто открываешь полученные данные в программе и анализируешь. Для того, чтобы такие данные получить нуно предварительно в программе расставить вызов определенных функций. После этого, после запуска программы получите стрим данных, которые потом можно удобно визуализировать и анализировать.
@GennPen2 жыл бұрын
Посмотрел, крутая штука. Он только для OS или без нее тоже можно использовать?
@chipsoft12 жыл бұрын
@@GennPen Без OS тоже можно использовать, например если нужно визуализировать вызовы прерываний
@GennPen2 жыл бұрын
@@chipsoft1 Спасибо, нужно будет поковырять на досуге.
@NIKOLAY_PSHONIA2 жыл бұрын
Владимир спасибо за инфу. Я дёргаю ножку МК с прерывании системного таймера. А по задачам другие ножки МК. И см осциллографов. Кому сколько времени нужно.
@Олег-и7т1и2 жыл бұрын
Насколько я помню - DAC только в старших линейках STM появляется. Штука редкая. Спасибо за видео!
@ogurezzz2 жыл бұрын
G0 серия это практически самая младшая линейка (Cortex-M0+), младше нее только F0. Но уже на G0B0 и G051 уже есть DAC.
@vernnms782 жыл бұрын
Вспомнилась мелодия из фильма про инопланетян. :-)
@МихаилТиунов-с7д2 жыл бұрын
Очень познавательно. Спасибо. А не пора ли сдвигаться в сторону GD32, например?
@VladimirMedintsev2 жыл бұрын
А зачем, в мелкосерийке по прежнему доступен STM.
@victorlowlevel80632 жыл бұрын
А чем GD32 в корне отличается от STM32? Я пробовал перепрошить одно устройство GD32F105xx - и даже была доступна отладка через SWD... Устройство это - китайская плата бегущей строки. Я там даже умудрился запустить пинг используя драйвер LAN на плате и стек Ethernet из куба... Плату затачивал под свои нужды - писал обменку для валют с управлением от ИК-пульта, отреверсив и вызвонив пины. Эти платы дешевле, чем сделать самим с нуля. Ничо не надо покупать и паять. Разве что хедер под программатор. Там уже и микруха часов есть с батарейкой и флешка на пару мегабайт W25Qxx... Просто купил... Залил свой код, допаял датчиков и в путь!
@projectlotus58152 жыл бұрын
Владимир спасибо за видео. В документации от arm/st я находил информацию что сейчас использовать swo это слишком накладно из-за дополнительной ножки и они рекомендуют делать форматный вывод через etm - у вас нет информации что это и как работает?
@VladimirMedintsev2 жыл бұрын
Embedded Trace Macrocell это в современных кортексах есть такое в ядре. Реально можно использовать. Но только если я не ошибаюсь там в ETM ножек много используется.
@MrCrossRaccoon2 жыл бұрын
Спасибо
@ajajapenoflex2 жыл бұрын
наглядно получилось
@TwentyNine972 жыл бұрын
В рекламе GB вы свой номер засветили🤫
@VladimirMedintsev2 жыл бұрын
Начиная со следующей недели мой номер телефона будет красоваться под каждым видео. Я его в следующем видео буду всем в явном виде предлагать.
@TwentyNine972 жыл бұрын
@@VladimirMedintsev ууу, спамом завалят. Вы отважный😎
@VladimirMedintsev2 жыл бұрын
Нет, не завалят. Мой телефон уже лет 10 можно спокойно в запросе яндекса найти. И пока не завалили.
@serggorod14232 жыл бұрын
Good job 👍
@ViacheslavMezentsev2 жыл бұрын
Для высокоуровневой отладки существует ещё такая библиотека, как LibP7. Есть статья на Хабре с описанием как её подключить и это немного сложновато, зато действительно работает. Может дойдут руки и я покажу как настроить окружение разработчика для её использования. Сам я её использовал для передачи телеметрии с контроллера по UDP. На ПК есть готовая программа для приёма этой телеметрии (Linux+Windows). Можно как графики рисовать, так и в журнале события регистрировать. Локальный интерфейс телеметрии может быть любой, только потом данные на компе всё равно нужно транслировать по сети. Поэтому в комплекте к LibP7 есть примеры, в т.ч. программы-прокси на этот случай.
@VladimirMedintsev2 жыл бұрын
Не уверен что это удобно еще и библиотеку пихать в микроконтроллер. Смысл отладки в том, чтобы не мешать и не искажать работу основной программы, а вы предлагаете еще и ethernet туда запихать... Весьма спорное предложение. Оно может работать если говорить о мониторинге, но вот отладка точно зашквар.
@VladimirMedintsev2 жыл бұрын
А ну так и есть LibP7 это не отладка. Это логирование и телеметрия.
@ViacheslavMezentsev2 жыл бұрын
@@VladimirMedintsev Никто не мешает использовать LibP7 поверх UART'а. Это дело пользователя как поток байт передавать на ПК. Можно сказать, что RTT тоже не отладка и там тоже требуется код поддержки. Точно такой же код требуется для LibP7, который "упаковывает" данные, минимизируя трафик. UDP (uIP) я использовал, потому что он был и он быстрее UART'а. Достоинство в том, что всё отладочное ПО для ПК уже написано. В этом основная проблема, когда занимаешься отладкой - удобство при разборе отладочных данных. Можно, конечно, и осциллографом смотреть, но не всегда это удобно.
@alexsv18342 жыл бұрын
В Keil можно в реал-тайм видеть значение регистров и менять их как захочешь, а в других, например, Cube IDE - так нельзя! Ещё надо останавливать приложение, чтобы посмотреть, что в регистрах :((( Ай :((((
@easystm68652 жыл бұрын
Можно ещё CubeMonitor использовать, чтобы видеть значения переменных в реальном времени
@alexsv18342 жыл бұрын
@@easystm6865 я не знал про такое. Погуглил - вроде бы прилично выглядит. Надо попробовать. Спасибо!
@VladimirMedintsev2 жыл бұрын
@@alexsv1834 Я CubeMonitor уже не один раз показывал. kzbin.info/www/bejne/p3jVfYdvbtCtmMk
@alexsv18342 жыл бұрын
@@VladimirMedintsev извините :(( не видел :((
@kon-stan-tin2 жыл бұрын
В обычном CubeIDE тоже можно наблюдать за значениями переменных в реальном времени если их добавить в закладке "Live Expressions".
@DIY_PLC2 жыл бұрын
Жаль что вы не упомянули про STM32CubeMonitor это супер инструмент не надо не единой дополнительной строчки кода писать ни чего подобного еще ни где не видел. Еще можно отлаживать по MODBUS как в промышленных ПЛК.
@VladimirMedintsev2 жыл бұрын
Про CubeMonitor я снимал даже несколько видео, но в данном контексте он совсем не в тему, он работает по SWD, а про этот интерфейс я подробно говорил. Тут видео посвящено другому.
@DIY_PLC2 жыл бұрын
@@VladimirMedintsev А есть еще STMStudio для отладки.
@goiiia37742 жыл бұрын
Ну или мигать светодиодиком на ардуинке )
@negodiaysamsonoff96162 жыл бұрын
а если нет осциллографа - можно звуком. только б с ума потом не сойти
@VladimirMedintsev2 жыл бұрын
Шикарно, надо послушать!
@gunnargunaxe2 жыл бұрын
Отладка через ЦАП... Мдаааа😅
@ЕвгенийСахаров-щ6ю2 жыл бұрын
Ни х@я не понятно но очень интересно
@СергейРыляков2 жыл бұрын
День добрый. Пытаюсь начать работать с stm32 и сразу же столкнулся с проблемой. При попытке "debug" в TrueStudio появляется уведомление После нажатия на "OK" уведомление пропадает, но при попытке загрузить в плату программу вылетает ошибка Даже голый проект (без моего кода)после st32cubemx не работает. Не подскажете, что делать. Плату пытаюсь прошить St-Link v2. Драйвера обновлённые.
@VladimirMedintsev2 жыл бұрын
Среда не видит ваш программатор. Вам необходимо воспользоваться инструкцией на TrueStudio и правильно настроить среду программирования.
@VladimirMedintsev2 жыл бұрын
Она в сообщении об ошибке даже пишет что именно не может сделать. Т.е. у вас проблемы не с кодом и не с продуктами STM. У вас проблемы со средой программирования.
@СергейРыляков2 жыл бұрын
@@VladimirMedintsev Спасибо. Хоть буду знать в каком направлении двигаться.