stm32 定位hardfault 的方法
·
1 获取 pc 或者psr寄存器的值

2 在编译生成的map文件中找到pc 值对应的函数

3 通用方法
打断点 获取sp寄存器值
在memroy browser找到压入栈中的函数位置
关键是理解sp寄存器 函数入栈出栈
一般的bug都是数组越界 堆栈溢出导致的
如果R14(LR) = 0xFFFFFF9, 查看MSP(主堆栈指针)的值
如果R14(LR) = 0xFFFFFFD, 查看PSP(进程栈指针)的值
MSP 值在memory中找到0x08开头的32位数,注意大小端
然后一定是在 Assembly界面中找代码,否则在map文件中有可能找不到具体函数。
4 不要在inline函数处添加断点
在内联函数中设置断点可能意味着设置数百或数千个“虚拟”断点。跟踪哪些代码被内联在哪里对于IDE来说太过于繁琐,因此它不会这样做。
inline 添加断点会经常引起Hardfault!
5.使用CmBacktrace,推荐
更多推荐
所有评论(0)