惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Security Blog
Microsoft Security Blog
J
Java Code Geeks
GbyAI
GbyAI
aimingoo的专栏
aimingoo的专栏
L
LangChain Blog
I
InfoQ
D
Docker
F
Fortinet All Blogs
Y
Y Combinator Blog
Martin Fowler
Martin Fowler
月光博客
月光博客
B
Blog
Engineering at Meta
Engineering at Meta
T
Tailwind CSS Blog
罗磊的独立博客
博客园_首页
G
Google Developers Blog
Stack Overflow Blog
Stack Overflow Blog
Recent Announcements
Recent Announcements
D
DataBreaches.Net
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog RSS Feed
IT之家
IT之家
V
V2EX

博客园 - 蓝天上的云℡

简洁低消耗字节内存池设计 ARM NEON&Thumb加速指令集 事件编程之eventfd 事件驱动编程模式之EventLoop syslog日志查看器GUI图形界面,支持Windows/Linux/Macos开箱即用 ERRNO链条分析 ARM AMBA总线之AXI系 Linux Kernel Init Bootstrap 内核初始化启动 RK芯片平台GPIO控制 Linux USB子系统之Gadget设备端驱动 远程调试桥接-网络-ADB-GDB 斐讯N1盒子安装飞牛FNOS NAS 安卓以太网链路检测 安卓原生开发-Recovery使用minui绘制图形 蓝牙音频协议——安卓开发 RKxx系列的RK628摄像头配置影响HDMI出图 usb储存之BOT/UAS内核驱动 现代操作系统-音频处理技术1 Linux驱动底层 Linux驱动适配I2C/SPI例子 模块编译的pr_debug Linux内核/GKI内核主线更新-usb网卡名称变更引出的BUG 为Kernel代码生成VSCODE索引,快速跳转 安卓开机时间/性能优化 Linux/Golang/glibC系统调用 SGDMA与普通DMA Linux内核源码-存储驱动之 QSPI Flash golang数据转换技巧
ARM崩溃堆栈报错寄存器分析定位
蓝天上的云℡ · 2026-08-26 · via 博客园 - 蓝天上的云℡

寄存器

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 地址为准,不能盲目直接换算。