Cortex-M3的Fault异常分为:
这里引用《Cortex-M3权威指南》说法:
这里引用《Cortex-M3权威指南》说法:
这里引用《Cortex-M3权威指南》说法:
硬件Fault也就是我们所说的HardFault,只要产生了总线、存储器管理、用法Fault其中之一,就会上报给硬件Fault,所以,最终的Falut我们都可以通过HardFault查看。
讲了几种Fault之后,我们需要了解一些基本的内核寄存器,后续查找Fault提供帮助。
注意:在RAM上编程时,应尽量只使用寄存器保存中间结果,迫不得已时才访问内存。
当中断来临的时候,R0-R3、R12、LR、PC、xPRS寄存器会自动的压栈,如果中断中使用了其它寄存器,在进入中断之前,也会对使用到的寄存器自动的压栈。
真实项目中,我们大多不必关心Fault状态寄存器的值,因为只要我们定位到错误的代码的位置,我们大致都能知道是什么错误了。
1. 首先工程跑到hardfault了;
2. 通过SP指针找到PC的值为0x08000046,LR的值为0x08001DEB,可知程序在执行了0x08000046指令之后就进入了HardFault,此时程序不会执行0x08001DEB这条指令。如果程序没有进入HardFault,那么子函数就会返回0x08001DEB这条指令。