+ Полностью согласен! Особенно момент на 15:13. :)) Но я это видео не 15 с чем-то минут смотрел, а может час по частям. Пока находил/просматривал упомянутые тут документы. Крутой человек (и комментатор и как специалист).
из не описанного на что лично я наступил - что бы printf вывел данные в консоль в конце строки должно стоять , либо необходимо отключить буферизацию вывода setvbuf(stdout, NULL, _IONBF, 0);
Приветствую Вас добрый человек ! Вы серьёзно подошли к вопросу отладки. Установите Atolic True studio и будет вам счастье. В файлах поддержки чётко обьясняется как производить отладку. Помимо принт ф одновременно можно выводить несколько переменных в отдельное окно. В Кейле я проделывал тоже,что вы показали в этом ролике,потратил очень много времени на изучение SWO. После установки Atolic True studio , Кейл даже открывать нет желания. )))
Я ни в коем случае не яаляюсь адептом тайного ордена любителей кейла. Каждый выбирает себе инструментарий по вкусу. Но как одно из отличий вы указали вывод переменных в отдельное окно. А в кейле вы этого разве не можете сделать? Там есть и просмотр стека и переменных.
Вводить можно через тотже вотч. Главное не трогать регистры таймеров. их значения нужно менять через переменную, в коде, а в вотче меняем значение переменной.
Отладка работает, но при включенной трассировке Keil выдает "Trace: No Synchronization". Использую китайский ST-Link V2, плата на базе STM32F407VET6. Тот же результат на STM32F103C8T6. Танцы с бубном не помогают, гугл тоже. Может ли трассировка вообще работать с китайским ST-Link V2?
Добрый день, Владимир! Давно Вас не видно "в эфире"... надеюсь, что у Вас всё в полном порядке. Столкнулись с неприятной проблемой при выводе дебаговой информации через пин SWO на процессоре F411. Дано: чип со сложной архитектурой регистров (контроллер питания AXP209). Пишем процедуру для STM32F411, считывающую содержимое каждого из управляющих регистров через I2C и выводящую расшифрованную информацию через printf(); в порт SWO. Проблема в том, что для большинства регистров информация выводится корректно, но в некоторых, чётко определённых местах, вывод как бы "затыкается", "проглатывая" часть строк и символов. Причем, вставка HAL_Delay(1000) не помогает, но если проходить процедуру пошагово, то вся информация выводится в порт корректно. При этом сам анализ тривиальнейший и как-либо загружать процессор вообще не должен никак: для каждого из считываемых регистров подготовлена структура с распределением бит (как Вы это показали в своём видео про написание библиотеки), и простейшим If , или switch-case просто выбирается нужный printf(); без каких-либо дополнительных вычислений. Уже и после каждого printf(); понаставили HAL_Delay(50) - не помогает... При этом сама процедура отрабатывает корректно (там, после считывания информации из регистра, еще идет сравнение с дефолтным значением и, в случае несовпадения, запись правильного значения назад в регистр), а "зависает" именно вывод printf(); Длинна всех строк примерно одинакова. Сами строки - вполне себе "чистый" ANSI, никаких кириллических или каких-либо других "вредоносных" символов. Работаем через STM32CubeIDE и его окно SWV ITM Data Console. Можно как-то принудительно вычищать буфер printf();? От чего еще может зависеть его работа? Спасибо за вашу помощь всем нам!
Я немного приболел. По этой причине и нет роликов. Как поправлюсь так сниму что-нибудь новое. По поводу вывода, проблема старая, я так понимаю что не корректно отрабатывает сам STLink.
Владимир, здравствуйте столкнулся с интересной проблемой: SWO проходит через переделанный программатор только при определенном HCLK (8 мгц) при остальных тишина. 1. Откуда тактируется SWO? 2. Сталкивались ли вы с такой проблемой?
Тема интересная. Не могу сообразить как нечто подобное сделать в кубе. В моем ST-Link есть вывод DIO. Поэтому надеюсь, что возможность вывода текста в консоль есть.
@@VladimirMedintsev Спасибо за моментальную реакцию. Нашел документ UM2609. Там есть буквы по интересующей теме. Многовато их... Попробую что-то понять.
Подскажите плииииз. Как в CUBE IDE можно из переменной выдать в порт логический уровень вместо GPIO_PIN_SET , например HAL_GPIO_WritePin(Port_DS, DS, VIHOD); . Перечитал описание HAL, весь гугль отфильтровал, но ничего нету.
@@VladimirMedintsev Например в переменной есть число 1 или 0. Как можно это число выдать на вывод МК в виде логической 1 или 0 ? Например HAL_GPIO_WritePin(Port_DS, DS, VIHOD); где значение VIHOD=1 или VIHOD=0. ЗА ВМЕСТО HAL_GPIO_WritePin(Port_DS, DS, GPIO_PIN_SET ) и HAL_GPIO_WritePin(Port_DS, DS, GPIO_PIN_RESET ) Или же есть массив с значениями 1 и 0. Как этот массив лог.уровней можно выдать последовательно на вывод ?
@@VladimirMedintsev Спасибо Володя😁🍟🍟😁, я просто ступил, шина 40 bit из 74HC595 , немного запутался в написании 40-ка переменных потому всплывало сообщение о ошибке. Нашлась причина,как говорится :-"Утро вечера мудреннее".
Дык вы все закладываемые в код отладочные строки кода предваряйте инструкцией #ifdef а завершайте #endif это позволит вам включать -выключать режим отладки кода одной строкой #define. Просто ознакомьтесь с директивами компилятора. Очень удобно
Отладка у STM32 хорошая, спору нет. Не знаю как в других средах, в STM32CubeIDE есть еще график, отслеживание до четырех числовых переменных по SWO, но тут же есть "Live Expressions" которая работает по SWD и поддерживающая чары.
Огромное человеческое спасибо за то что находите время и пилите видосы для начинающих, вы даже не представляете насколько это помогает сообществу.!
+ Полностью согласен! Особенно момент на 15:13. :)) Но я это видео не 15 с чем-то минут смотрел, а может час по частям. Пока находил/просматривал упомянутые тут документы. Крутой человек (и комментатор и как специалист).
Спасибо Вам за ваши видео, очень позновательно !
Спасибо за открытые возможности по отладка!
Спасибо, интересный канал, много полезных материалов
Тот случай когда одного лайка мало. Хочется поставить 100500
из не описанного на что лично я наступил - что бы printf вывел данные в консоль в конце строки должно стоять
, либо необходимо отключить буферизацию вывода
setvbuf(stdout, NULL, _IONBF, 0);
Ждем
круто!! супер вещь!
Приветствую Вас добрый человек ! Вы серьёзно подошли к вопросу отладки. Установите Atolic True studio и будет вам счастье. В файлах поддержки чётко обьясняется как производить отладку. Помимо принт ф одновременно можно выводить несколько переменных в отдельное окно. В Кейле я проделывал тоже,что вы показали в этом ролике,потратил очень много времени на изучение SWO. После установки Atolic True studio , Кейл даже открывать нет желания. )))
Я ни в коем случае не яаляюсь адептом тайного ордена любителей кейла. Каждый выбирает себе инструментарий по вкусу. Но как одно из отличий вы указали вывод переменных в отдельное окно. А в кейле вы этого разве не можете сделать? Там есть и просмотр стека и переменных.
Дайте ссылку пожалуйста на эти файлы, ознакомимся хоть.
И мне тоже...
Диван Диваныч это Труе Студио которое сейчас принадлежит ST?
@@englishman_i На офсайте атолика посмотрите, мне с телевизора не очень удобно пользоваться браузером.
Спасибо, полезно)
@VladimirMedintsev
Здравствуйте! А если в плате/ микроконтролере нет SWO? К примеру серия G0. Есть решение???
Вводить можно через тотже вотч. Главное не трогать регистры таймеров. их значения нужно менять через переменную, в коде, а в вотче меняем значение переменной.
Отладка работает, но при включенной трассировке Keil выдает "Trace: No Synchronization". Использую китайский ST-Link V2, плата на базе STM32F407VET6. Тот же результат на STM32F103C8T6. Танцы с бубном не помогают, гугл тоже. Может ли трассировка вообще работать с китайским ST-Link V2?
Добрый день, Владимир!
Давно Вас не видно "в эфире"... надеюсь, что у Вас всё в полном порядке.
Столкнулись с неприятной проблемой при выводе дебаговой информации через пин SWO на процессоре F411. Дано: чип со сложной архитектурой регистров (контроллер питания AXP209). Пишем процедуру для STM32F411, считывающую содержимое каждого из управляющих регистров через I2C и выводящую расшифрованную информацию через printf(); в порт SWO. Проблема в том, что для большинства регистров информация выводится корректно, но в некоторых, чётко определённых местах, вывод как бы "затыкается", "проглатывая" часть строк и символов. Причем, вставка HAL_Delay(1000) не помогает, но если проходить процедуру пошагово, то вся информация выводится в порт корректно.
При этом сам анализ тривиальнейший и как-либо загружать процессор вообще не должен никак: для каждого из считываемых регистров подготовлена структура с распределением бит (как Вы это показали в своём видео про написание библиотеки), и простейшим If , или switch-case просто выбирается нужный printf(); без каких-либо дополнительных вычислений.
Уже и после каждого printf(); понаставили HAL_Delay(50) - не помогает... При этом сама процедура отрабатывает корректно (там, после считывания информации из регистра, еще идет сравнение с дефолтным значением и, в случае несовпадения, запись правильного значения назад в регистр), а "зависает" именно вывод printf(); Длинна всех строк примерно одинакова. Сами строки - вполне себе "чистый" ANSI, никаких кириллических или каких-либо других "вредоносных" символов. Работаем через STM32CubeIDE и его окно SWV ITM Data Console.
Можно как-то принудительно вычищать буфер printf();? От чего еще может зависеть его работа?
Спасибо за вашу помощь всем нам!
Я немного приболел. По этой причине и нет роликов. Как поправлюсь так сниму что-нибудь новое. По поводу вывода, проблема старая, я так понимаю что не корректно отрабатывает сам STLink.
@@VladimirMedintsev, спасибо! Желаю скорейшего выздоровления!
Владимир, здравствуйте столкнулся с интересной проблемой: SWO проходит через переделанный программатор только при определенном HCLK (8 мгц) при остальных тишина.
1. Откуда тактируется SWO?
2. Сталкивались ли вы с такой проблемой?
Досмотрел. Про ввод не знал.
Был опыт использования Rust для программ контроллеров?
Нет, не было. Есть FreeRToS ее более чем достаточно.
@@VladimirMedintsev а с изиком програмирования D когда либо игрались?
@@ОлександрТанюк По сложившейся практике чаще всего для программирования микроконтроллеров используется классический Си.
Ай, спасибо, Айболит!
Тема интересная. Не могу сообразить как нечто подобное сделать в кубе. В моем ST-Link есть вывод DIO. Поэтому надеюсь, что возможность вывода текста в консоль есть.
В инструкции к кубу прочитайте. У него великолепное руководство пользователя и этот момент там описан.
@@VladimirMedintsev Спасибо за моментальную реакцию. Нашел документ UM2609. Там есть буквы по интересующей теме. Многовато их... Попробую что-то понять.
11 минута - у меня - Trace: no Sinchronization , так и не могу справиться - почему ? сможете подсказать?
Option for Target -> Debug -> Settings -> Trace -> Core clock и Trace Enable правильно установлены? Скорее всего нет.
Подскажите плииииз. Как в CUBE IDE можно из переменной выдать в порт логический уровень вместо GPIO_PIN_SET , например HAL_GPIO_WritePin(Port_DS, DS, VIHOD); . Перечитал описание HAL, весь гугль отфильтровал, но ничего нету.
Вопрос не понятен.
@@VladimirMedintsev Например в переменной есть число 1 или 0. Как можно это число выдать на вывод МК в виде логической 1 или 0 ? Например HAL_GPIO_WritePin(Port_DS, DS, VIHOD); где значение VIHOD=1 или VIHOD=0. ЗА ВМЕСТО HAL_GPIO_WritePin(Port_DS, DS, GPIO_PIN_SET ) и HAL_GPIO_WritePin(Port_DS, DS, GPIO_PIN_RESET ) Или же есть массив с значениями 1 и 0. Как этот массив лог.уровней можно выдать последовательно на вывод ?
@td_44 HAL_GPIO_WritePin(порт, пин, переменная);
@@VladimirMedintsev Спасибо Володя😁🍟🍟😁, я просто ступил, шина 40 bit из 74HC595 , немного запутался в написании 40-ка переменных потому всплывало сообщение о ошибке. Нашлась причина,как говорится :-"Утро вечера мудреннее".
а для cubeIDE (на linux), на тему етого видего, можите посоветовать какую нибуть статью?
А что потом делать с ненужными операторами в программе, после окончания процесса отладки?
Дык вы все закладываемые в код отладочные строки кода предваряйте инструкцией #ifdef а завершайте #endif это позволит вам включать -выключать режим отладки кода одной строкой #define.
Просто ознакомьтесь с директивами компилятора. Очень удобно
я использую семихостинг через свд вместо вывода в уарт. иначе это не отладка
С МК с ядром М0 и М0+ возможность выбора ITM отсутствует
Ссылка на документ?
Нашёл.
Какой такой документ?
@@VladimirMedintsev я всё нашел.
Отладка у STM32 хорошая, спору нет.
Не знаю как в других средах, в STM32CubeIDE есть еще график, отслеживание до четырех числовых переменных по SWO, но тут же есть "Live Expressions" которая работает по SWD и поддерживающая чары.