一个关于数组越界引起的hardfault问题
作者:互联网
在一个月黑风高的下午,写完程序一上电就发生了hard fault异常。
出现hard fault异常可能是数组越界,非法内存访问等。
一般都是根据PC的值查找语句命令,从而定位异常位置,但这种定位有时候不准确,特别是用操作系统进行任务或者线程管理时。
同样也可以调出Call Stack Window,来观察在断点时堆栈保存的参数,进而判断出现出现hard fault异常原因。
首先观察串口打印的数据,发现是bus fault引起的hard fault,bus fault一般是数据读取,或者中断时检测到内存访问错误产生的。
之后仿真时查看异常报告,更精确的查看异常类型,发现是非精确数据总线错误。
根据串口打印的数据,从已经执行成功的代码单步调试,一直向下排查,同时打开Call Stack Window,来观察在断点时堆栈保存的参数,发现是在下图的函数返回时发生的错误。判断是数组越界,想起来添加modbus寄存器时没有及时更新寄存器数量,更改数组数量,问题解决。
标签:hardfault,fault,hard,断点,越界,数组,异常 来源: https://www.cnblogs.com/1998wdq/p/16483819.html