Hardfault处理方法

keil仿真对HardFault_Handler的处理: Hardfault处理方法
文章图片
STM32出现硬件错误可能有以下原因:
【Hardfault处理方法】(1)数组越界操作;
(2)内存溢出,访问越界;
(3)堆栈溢出,程序跑飞;
(4)中断处理错误;
在while(1)打断点
1.提取SP值,SP指向当前使用的栈顶 Hardfault处理方法
文章图片
Hardfault处理方法
文章图片

LR值0xFFFFFFE9使用 MSP(主堆栈指针)的值,0xFFFFFFFD使用PSP(进程栈指针)的值
Hardfault处理方法
文章图片

2.在memory窗口输入栈顶地址SP,提取LR值,LR值指向错误指令的下一条指令 Hardfault处理方法
文章图片
Hardfault处理方法
文章图片

3.在汇编窗口输入LR值,定位错误代码下一条指令位置,在仿真窗口定位错误代码位置 Hardfault处理方法
文章图片

Hardfault处理方法
文章图片

4.观察汇编窗口定位错误 Hardfault处理方法
文章图片

5.解析汇编命令 Hardfault处理方法
文章图片
Hardfault处理方法
文章图片
Hardfault处理方法
文章图片
Hardfault处理方法
文章图片
Hardfault处理方法
文章图片
Hardfault处理方法
文章图片

6.分析ActiveWindowProc函数Hardfault处理方法
文章图片
发现WindowProc地址为堆栈初始化的值,非合法函数地址
Hardfault处理方法
文章图片

    推荐阅读