Здравствуйте.
У меня есть плата STM32F103C6T6-Blue-Pill.
Пробую отладить STM32 по UART, т.к. у меня нет отладчика.
За основу взята эта статья - https://habr.com/ru/articles/488672/
Вопрос такой.
После срабатывания и прерывания DebugMon_Handler(), возможно или нет продолжить выполнения кода?
И не очень понял, как вызвать DebugMon_Handler() при условии равенства регистра PC и одного из регистров FP_COMP.
Добрый день!
По теме не подскажу, но в целом кажется, что эффективнее будет отладчик раздобыть... А если по UART, возможно будет удобнее конкретную информацию в него выдавать из конкретных мест программы и на основе этого отлаживать, но это наверно кому как, мне лично так намного удобнее.
Код сишный работает на на компе (codeblocks-17.12mingw-nosetup).
А на stm неожиданно для меня выдал не понятное.
Попытался отловить место.
Минус в том, что приходится перепрошивать много раз, чтобы выловить ошибку.
Сразу не подумал об отладчике 🙁
Пробую отладить STM32 по UART, т.к. у меня нет отладчика.
А прошиваете чем?
Купите ST Link. Избавитесь от многих проблем.
Купите ST Link. Избавитесь от многих проблем.
Для меня найти решение - это что-то типа охоты, азарта.
Решение должно быть. Не зря регистр CoreDebug->DEMCR имеет кучу бит (флагов).
Ну, а так вы правы - нужен отладчик.
Здравствуйте.
Сделала программатор программатор/отладчик JLink по этой статье - Делаем из BluePill пограмматор/отладчик JLink
Установил SEGGER Embedded Studio.
Импортировал проект из IAR Embedded Workbench.
В какой-то момент SEGGER запросил путь к IAR.
У меня путь - "C:\STM32Toolchain\IAR Systems\Embedded Workbench 9.1\arm\bin"
Я указал папку IAR Systems.
Теперь SEGGER не может найти IARю
Вопрос:
Как указать правильный путь для SEGGER, чтобы он нашел IAR.
Я запутался и не могу найти эту опцию в настройках.
Так, с этим разобрался
Это окно появляется при Import-IAR EWARM Project
"\arm\bin" - SEGGER сам добавляет к папке, которую вы укажите.
Теперь
при компиляции вылезла следующая ошибка:
Rebuilding ‘debug_to_uart’ from solution ‘debug_to_uart’ in configuration ‘Debug External’
2> Compiling ‘system_stm32f1xx.c’
2> "C:/STM32Toolchain/IAR Systems/Embedded Workbench 9.1/arm/bin/iccarm" --silent --dlib_config ""C:/STM32Toolchain/IAR Systems/Embedded Workbench 9.1/arm/inc/c/DLib_Config_Normal.h"" -e -DDEBUG -I./CMSIS -I./Inc -I./Src -I./Sratup ./CMSIS/system_stm32f1xx.c --dependencies=m Debug/Obj/system_stm32f1xx.d --no_wrap_diagnostics -o Debug/Obj/system_stm32f1xx.o -On -r --cpu Cortex-M3 --fpu none
1> Assembling ‘startup_stm32f103x6.s’
1> "C:/STM32Toolchain/IAR Systems/Embedded Workbench 9.1/arm/bin/iasmarm" -S -I./CMSIS -I./Inc ./Sratup/startup_stm32f103x6.s -o Debug/Obj/startup_stm32f103x6.o -r --cpu Cortex-M3 --fpu none
2>
2> #include _DLIB_CONFIG_FILE_HEADER_NAME
2> ^
2> Fatal error detected, aborting.
2> Build failed
Как победить ее?
Вернулся к DebugMonitor -Пошаговая отладка без отладчика
Мое виденье этого.
Режим монитора отладки - включает отладку в запущенных системах с помощью обработчика исключений DebugMonitor. Это может быть полезно в сценариях, когда остановка ядра приведет к сбою чувствительных к времени подсистем, или в случаях использования, когда подключение отладчика невозможно.
обработчик void DebugMon_Handler().
Или когда просто нет отладчика, как у меня.
регистр управления монитором (DEMCR)
MON_EN - Определяет, включено исключение DebugMonitor или нет. Когда включено, отладочные “события” вызовут срабатывание исключения.
MON_PEND - Может использоваться для запуска исключения DebugMonitor независимо от того, имеет MON_EN значение 1 или нет.
MON_REQ - Не используется MCU. Программное обеспечение может использовать этот бит для передачи состояния режима монитора.
MON_STEP - Может быть переключена из исключения DebugMonitor для включения аппаратного одношагового выполнения.
Если задано, при возврате из обработчика исключений ядро выполнит единственную инструкцию, а затем вернется к исключению DebugMonitor. (?тут есть вопросы?)
Итак,чтобы вызвать обработчик достаточно строки - CoreDebug->DEMCR |= CoreDebug_DEMCR_MON_PEND_Msk;
В обработчике можно проверить, что вызвало прерывание
//DWTTRAP Указывает, что событие отладки было сгенерировано из-за конфигурации в DWT.
if (!SCB->DFSR & SCB_DFSR_DWTTRAP_Msk) {uart1_write_String("\r\nDWTTRAP");}
//BKPT Указывает, что произошло одно или несколько событий точки останова (либо с помощью FPB,/
if (!SCB->DFSR & SCB_DFSR_BKPT_Msk) uart1_write_String("\r\nBKPT");
//HALTED Указывает, что ядро было остановлено из-за запроса MON_STEP.
if (!SCB->DFSR & SCB_DFSR_HALTED_Msk) uart1_write_String("\r\nHALTED");
При выходе из обработчика продолжить выполнение
CoreDebug->DEMCR |= CoreDebug_DEMCR_MON_STEP_Msk;
или остановится
CoreDebug->DEMCR =~ CoreDebug_DEMCR_MON_STEP_Msk;
(при выходе из обработчика буде снова вызван обработчик)
Сегодня удалось подключиться через JLink (пост выше) к SEGGER Embedded Studio.
При запросе обновить прошивку - обновил.
Решил вопрос с
J-Link V7.94c Warning
The connected probe appears to be a J-Link clone.
Using the J-Link software with a clone is forbidden and illegal.
Proper operation cannot be guaranteed.
In case of doubt, please contact SEGGER via https://www.seqger.com/support/technical-support/ and include a screenshot of this dialog.
J-Link information:
S/N: 20090928
Firmware: J-Link ARM-OB STM32 compiled Aug 22 2012 19:52:04
Built-in licenses: RDI, FlashDL,FlashBP, JFlash, GDBFull
O.K.
Предупреждение J-Link V7.94c
Подключенный датчик, по-видимому, является клоном J-Link.
Использование программного обеспечения J-Link с клоном запрещено.
Правильная работа не может быть гарантирована.
В случае сомнений, пожалуйста, свяжитесь с SEGGER через https://www.seqger.com/support/technical-support / и приложите скриншот этого диалога.
Информация о J-Link:
S/N: 20090928
Прошивка: J-Link ARM-OB STM32 скомпилирован 22 августа 2012 г. 19:52:04
Встроенные лицензии: RDI, FlashDL,FlashBP, JFlash, GDBFull
O.K.
При отладке, отладчик принудительно отключается.
Уже не помню, но прочитал гдето, что нужно убрать GDBFull на GDB.
В общем нашел другую прошивку
и с помощью шестнадцатеричного редактора и заменить строку "GDBFull" на "GDB".
PS:
Сообщение J-Link V7.94c Warning больше не появляется.
В общем перестал отваливаться отладчик.
В принципе я разобрался и без отладчика в своей проблеме:
Проблема была в статических переменных - static
Вот так работает под отладчиком
Рад, что все получилось 👍