赞
踩
软件的错误是比较常见导致单片机进入hard fault的原因
在进入hard fault中断时打断点,然后查看call stack + local,右键,选择show caller code 可能查看到进入hardfault时运行前的代码。但有时不一定有效

1、确定sp数值,看使用的是MSP还是PSP,可以利用LR的bit[2]确定调用进程的使用的哪个栈,如果Bit 2 == 0则是MSP压栈,如果Bit 2 == 1则是PSP压栈
2、查看arm内核寄存器值,查看SP指针数值

3、在memory中查看sp指向的地址,以unsigned long查看

4、查看第六个数值,即异常压栈前LR寄存器的值,一般是08xxxxxx。

5、反汇编,查看这个数值所指向的代码


由于CortexM3 M4的处理器只支持Thumb状态,所以BLX使用的寄存器最低位必须要置为1。使用栈中保存的lr的值-1就为实际的反汇编代码的地址。
5、在跳转的地址附近查找可能出现的错误代码
1、《ARM Cortex-M3与Cortex-M4权威指南》
2、MDK快速定位硬件异常位置方法,调用show caller code即可快速锁定
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。