在工作过程中移植部分功能程序后发现程序经常性莫名卡死,然后就一直在HardFault_Handler中断卡死,解决如下。
1、首先去网上查询了出现HardFault_Handler是由于什么原因造成?
(1)堆栈溢出:这个可能性不大;
(2)数组越界:估计应该就是这个原因,因为移植的代码目前还在研发阶段,很大概率是存在问题;
2、定位问题代码位置
(1)在硬件中断函数HardFault_Handler里的while(1)处打调试断点,程序执行到断点处时点击“STOP”停止仿真。
(2)在Keil菜单栏点击“View”——“Call Stack Window”弹出“Call Stack + Locals”对话框。然后在对话框中右键选择“Show Caller Code”,就会跳转到出错之前的函数处,仔细查看这部分函数被调用或者数组内存使用情况,如下图。
其实还有另一种方法,后续完善,由此可见Keil功能还有很多待了解的功能,后续了解学习后继续完善。