keil仿真对HardFault_Handler的处理:
文章图片
STM32出现硬件错误可能有以下原因:
【Hardfault处理方法】(1)数组越界操作;
(2)内存溢出,访问越界;
(3)堆栈溢出,程序跑飞;
(4)中断处理错误;
在while(1)打断点
1.提取SP值,SP指向当前使用的栈顶
文章图片
文章图片
LR值0xFFFFFFE9使用 MSP(主堆栈指针)的值,0xFFFFFFFD使用PSP(进程栈指针)的值
文章图片
2.在memory窗口输入栈顶地址SP,提取LR值,LR值指向错误指令的下一条指令
文章图片
文章图片
3.在汇编窗口输入LR值,定位错误代码下一条指令位置,在仿真窗口定位错误代码位置
文章图片
文章图片
4.观察汇编窗口定位错误
文章图片
5.解析汇编命令
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
6.分析ActiveWindowProc函数
文章图片
发现WindowProc地址为堆栈初始化的值,非合法函数地址
文章图片