|
|||||||
Почему не срабатывает брекпоинт при отладке платы STM32?
Время создания: 13.10.2022 22:07
Текстовые метки: platformio, stm32, bluepill, STM32F103C8T6, отладка, debug, останов, breakpoint, не работает, не срабатывает
Раздел: Компьютер - Аппаратное обеспечение - Микроконтроллеры ARM
Запись: xintrea/mytetra_syncro/master/base/1665688042icypp27hc9/text.html на raw.github.com
|
|||||||
|
|||||||
Бывает так, что начинающий разработчик под STM32 прошел все препятствия: раздобыл плату, разобрался с китайскими репликами, собрал схему прошивки или докупил ST-Link/JLink, установил среду разработки, включил в ней отладочный сервер, собрал тестовый пример, собрал схему, залил прошивку и увидел что даже что-то работает. Но вот от дошел до отладки - и что же? Отладка не хочет работать. Почему? Вариантов, почему отладка не работает может быть много. Здесь даны рекомендации при отладке через ST-LINK. Итак, что нужно знать. Если плата подключена через ST-LINK к 4-х контактному разъему SWD, то слушать "гуру", которые будут утверждать, что если отключен JTAG, то отладка работать не будет - совершенно не стоит. Даже с отключенным JTAG-ом отладка по ST-LINK должна работать. А первая причина, почему отладка не работает - это то, что в коде отключены прерывания. Обычно вначале программисту интересно, с какой максимальной скоростью работает плата. Он делает "ногодрыг" в бесконечном цикле, и отключает все что возможно, в том числе и прерывания. Ногодрыг действительно работает с максимальной скоростью. Вот только отладка в такой конфигурации работать не будет. Вторая причина - это то, что брекпоинт не будет работать в том случае, если он поставлен на коде, который размещается в оперативной памяти контроллера (ОЗУ). Вот такая особенность STM32: брекпоинты срабатывают только на коде, размещенном во Flash. Если функция была размещена в ОЗУ, например так: __attribute__((noinline, section(".ramfunc"))) void ourFunction() { ... } - то поставить брекпоинт внутри такой функции можно, вот только он молча не будет срабатывать. Возможно есть еще какие-то ситуации, когда брекпоинт не срабатывает. По мере появления новой информации эта статья будет пополняться. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|