ARM崩溃堆栈报错寄存器分析定位
寄存器
ARM寄存器CFSR,全称Configurable Fault Status Register

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 地址为准,不能盲目直接换算。
本文来自博客园,作者:蓝天上的云℡,采用 BY-NC-SA 许可协议,转载请注明:转载自作者蓝天上的云℡ 原文链接 https://www.cnblogs.com/yucloud/p/22698561/arm_stack_reg

浙公网安备 33010602011771号