定位引起hardfault错误的故障代码
准备
- stm32f103开发板
- keil软件
基础知识
两个堆栈指针
Cortex-M3 拥有两个堆栈指针,然而它们是 banked,因此任一时刻只能使用其中的一个。
- 主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程)
- 进程堆栈指针(PSP):由用户的应用程序代码使用。
入栈
响应异常的第一个行动,就是自动保存现场的必要部分:依次把xPSR, PC, LR, R12以及R3-R0由硬件自动压入适当的堆栈中:如果当响应异常时,当前的代码正在使用PSP,则压入PSP,也就是使用进程堆栈;否则就压入MSP,使用主堆栈。一旦进入了服务例程,就将一直使用主堆栈。
异常返回值
在进入异常服务程序后,将自动更新LR的值为特殊的EXC_RETURN。这是一个高28位全为1的值,只有[3:0]的值有特殊含义


具体错误举例
精确的总线错误
在正常运行的代码中添加如下代码,示例中使用的是跑freertos的代码。我们定义一个指针,不赋值,

最低0.47元/天 解锁文章
2834

被折叠的 条评论
为什么被折叠?



