ARM崩溃堆栈报错寄存器分析定位

寄存器

ARM寄存器CFSR,全称Configurable Fault Status Register
image

CFSR[7:0] = MMFSR 内存管理异常
CFSR[15:8] = BFSR 总线异常
CFSR[31:16] = UFSR 用法异常

根据M33内核手册 https://support.arm.com/documentation/100235/0004/the-cortex-m33-peripherals/system-control-block/configurable-fault-status-register
CFSR = 0x00100000
即 UFSR = CFSR >> 16 = 0x0010
即 UFSR bit4
即 UFSR.STKOF = 1
即 Stack Overflow,使用 PSP/MSP 时越过了 PSPLIM/MSPLIM 设置的栈下界,是硬件栈限制检测出的同步异常。
表示 PSP 接近 PSPLIM

日志


Memory Dump Format(1)

In Usage Fault Handler
SCB->CFSR = 0x00100000
Usage fault:
===============================================
Exception Log: Copy Start
===============================================
r0  = 0xa5a5a5a5
r1  = 0xa5a5a5a5
r2  = 0x08020508
r3  = 0x21000000
r4  = 0x00000000
r5  = 0x080a7330
r6  = 0x080a7328
r7  = 0x000120a8
r8  = 0x80000000
r9  = 0x0807c2d4
r10 = 0x0807c2e0
r11 = 0x000000ff
r12 = 0x00000001
lr  = 0x0000006c
pc  = 0x080d85d8
psr = 0x0000006c
EXC_RET = 0xfffffffd
CONTROL = 0x00000002
MSP     = 0x00110fe0
MSPLIM  = 0x00110000
PSP     = 0x105184f0
PSPLIM  = 0x105184d0
sp      = 0x105184f0

memory dump start.

0x0802ec80: 182762f6 0000006a 0001001f 18063c59
0x0802ec90: 18061c8d 00000001 ffffffff 182821d0
0x0802eca0: 00000000 0001001f 18063c59 18061c8d

解决

通过ELF文件定位堆栈对应源码

反定位PC

ELF=out/m33_xip_bga_al.elf
arm-none-eabi-addr2line     -e "$ELF" -a -f -C -i 0x080d85d8

反定位LR

arm-none-eabi-addr2line     -e "$ELF" -a -f -C -i <stacked_lr>

查看附近指令

arm-none-eabi-objdump -dS "$ELF" \
  --start-address=0x080d8580 \
  --stop-address=0x080d8620

查看附近符号

arm-none-eabi-nm -n "$ELF" | less

注意:存在 XIP/地址映射时,应以 linker map 和 ELF section 地址为准,不能盲目直接换算。

posted @ 2026-08-26 14:49  蓝天上的云℡  阅读(2)  评论(0)    收藏  举报