Где находится адрес аппаратной точки останова Cortex-M4?

функция отладки m4, я использую обнаружение stm32f407 с openocd, gdb в ubuntu

Я пытаюсь понять функцию точки останова, я могу установить адрес точки останова в openocd с помощью gdb, и чип остановится, когда компьютер запустится по этому адресу.

например, основная функция находится по адресу 0x8008000, я думаю, должен быть регистр для хранения этого адреса (0x8008000), но я не могу найти, где этот регистр. Я нашел FP_COMP0~FP_COMP7 в руководстве по FPB, но в gdb он всегда показывает 0, и я думаю это для новых адресов, которые трансформируются в.

Может ли кто-нибудь сказать мне, где узнать соответствующую информацию, спасибо :)


person aaa SA    schedule 05.05.2018    source источник


Ответы (1)


Вы правы, это регистры FP_COMP0-FP_COMP7 в FPB (Flash Patch and Breakpoint Unit) — http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0439b/BABGEDIG.html.

Это работает, только что проверил на практике (установлено 4 точки останова):

введите здесь описание изображения

Просто убедитесь, что при использовании IDE он может кэшировать ранее считанные значения регистров, и установка точки останова не сразу отобразится в памяти, которую вы видите через IDE. Принудительное обновление (например, путем запуска и приостановки программы) заставит ее отображать правильные значения.

person Jacek Ślimok    schedule 10.05.2018
comment
Мне было интересно то же самое - почему FP_COMP0~FP_COMP7 всегда были равны нулю, хотя у меня были установлены точки останова. Причина заключалась в том, что я смотрел на представление памяти Eclipse, которое работает только тогда, когда цель приостановлена, но GDB фактически удаляет точки останова при приостановке и повторно вставляет их перед продолжением. Когда я возвращаюсь к цели и проверяю память с помощью OpenOCD, я вижу FP_COMP0~FP_COMP7, как и ожидалось. - person pm_; 11.05.2018