Мы работаем над чипом STM32F103 (ARM Cortex M3) и скомпилируем наш проект с помощью uVersion (компилятор ARM-MDK). Когда произошел сбой, мы сохранили регистры ПК и LR. После этого мы хотели бы сопоставить адреса, сохраненные в регистрах ПК и LR, на строки исходного кода для чтения человеком, написав некоторые сценарии. Я прочитал это What are .axf files?, в котором говорится, что axf содержит такую информацию. Но я не знаю, как его использовать. Большое спасибо.Как сопоставить ARM Cortex M3 PC/LR адрес с исходной строкой?
[обновление 1]
Сегодня я попробовал fromelf.exe, который может сбросить некоторую отладочную полезную информацию (fromelf.exe --text -g E: \ proj_keil \ keil_output \ test.axf), например:
008f5d: SPECIAL(0, 1) : 13 080043cc: ..\init\main.c:23.5
008f5e: DW_LNS_negate_stmt : 06
008f5f: SPECIAL(1, 2) : 1a 080043d0: ..\init\main.c:24.5 [
Когда я ищу разбившийся адрес компьютера (0x080043d0), я могу найти свою соответствующую исходную строку, хотя я не нашел источник линии LR-адрес в этой аварии.
Могу ли я использовать fromelf.exe, чтобы решить мою проблему?
Я не знаю о ARM-MDK, но gcc toolchain имеет утилиту «addr2line», используемую для этой цели. Скорее всего, ваша инструментальная цепочка имеет нечто похожее. Addr2line нуждается в файле .elf с отладочной информацией. .axf похоже, тот же файл, что и .elf с debug .. – mkmk88