1. AXF文件反汇编
在C:\Keil_v5\ARM\ARMCC\bin下 fromelf -c xxx.axf -o xxx.txt 生成一个txt文件
2. Ozone调试AXF
非侵入式调试首选,连接之后不复位,重新下载,并选择AXF文件进行调试。
查看Register窗口,如果LR寄存器数值为0XFFFF_FFF9 表示为返回线程模式,并使用主堆栈(SP=MSP)
如果LR寄存器数值为0XFFF_FFFD 表示为使用线程堆栈(SP=PSP)
LR寄存器非以上值时,SHIFT+F10 跳过while(1),直到HardFault_Handler顶层目录,再查看LR寄存器
优先查看PSP寄存器,找到对应内存信息后保存该片信息。
分析时找到上面保存的内存片信息中的flash地址(通常为0x08xxxxxxxxx)找到
再将flash地址最低位清零,在反汇编文件中找对应地址
把内存片中的flash地址 遍历一遍找到调用关系
3. 错误分析
可以通过Registers->CPU->Peripherals->SCB 中查看错误标志分析
cm_backtrace
打开该组件后会在HardFault时打印AXF文件名称、出错线程、堆栈信息、寄存器信息。
找到addr对应data中的flash地址
使用addr2line -e xxx.axf -a -f deadbeef 0800xxxx 就可以输出对应函数和所在.c的行号
Ozone及addr2line.exe在我的链接中自取。
————————————————
版权声明:本文为CSDN博主「墨染 锦年」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_44710568/article/details/127753045
|