Комментарии 19
То преподавателей писал
Идея интересная, буду ждать продолжения!
Пара ремарок:
Если вы пользуетесь HAL'ом, то вы автоматически пользуетесь и библиотекой CMSIS, которая дает следующие возможности:
- вместо ассемблерной вставки можно использовать псевдоним __BKPT; аналогичные псевдонимы есть для большинства ассемблерных команд
- адреса отладочных регистров можно не определять самостоятельно, к ним есть доступ через "структуру" CoreDebug —
CoreDebug->DEMCR
, например
Жду продолжения. Хорошо бы рассмотреть, что вообще можно делать в прерывании DebugMon, а то бесконечная печать восклицательных знаков пока не сильно отличается от такой же печати в коде самой прошивки.
Как я понимаю, в прерывании можно реализовать свой протокол для общения с самопальным отладчиком на компьютере, включая просмотр содержимого памяти и регистров?
Находим адрес любой инструкции в цикле функции main средствами IDE и активируем точку останова:
FP->FP_COMP[0] = 0x080017CC | 1; // адрес середины бесконечного цикла = 0x080017CC
И так при каждой компиляции программы узнавать через отладку адреса всех нужных точек остановки? Не проще ли breakpoint поставить? Ну или можно как-то «автоматизировать» выдергивание адресов нужных инструкций?
P.S. DebugMon на самом деле идеально не для инструкций использовать, а для переменных, чьи адреса всегда известны. Жду продолжения.
Ожидал статью про то, как прикрутить gdb агент...

В самом деле у ARM Cortex-M4 есть такие регистры (Flash Patch and Breakpoint Unit).
Получается можно из UART-CLI ставить и проверять точки останова.
А где можно посмотреть бинарную структуру регистра FP_CTRL ?
0xE0002000 FP_CTRL FlashPatch Control Register
В доке Cortex-M4 Technical Reference Manual Revision r0p0 (который 117 стр)
Эта информация отсутствует.
Отладка микроконтроллеров ARM Cortex-M по UART