一个关于数组越界引起的hardfault问题

 在一个月黑风高的下午,写完程序一上电就发生了hard fault异常。

出现hard fault异常可能是数组越界,非法内存访问等。

一般都是根据PC的值查找语句命令,从而定位异常位置,但这种定位有时候不准确,特别是用操作系统进行任务或者线程管理时。

同样也可以调出Call Stack Window,来观察在断点时堆栈保存的参数,进而判断出现出现hard fault异常原因。

首先观察串口打印的数据,发现是bus fault引起的hard fault,bus fault一般是数据读取,或者中断时检测到内存访问错误产生的。

之后仿真时查看异常报告,更精确的查看异常类型,发现是非精确数据总线错误。

 

根据串口打印的数据,从已经执行成功的代码单步调试,一直向下排查,同时打开Call Stack Window,来观察在断点时堆栈保存的参数,发现是在下图的函数返回时发生的错误。判断是数组越界,想起来添加modbus寄存器时没有及时更新寄存器数量,更改数组数量,问题解决。

 

 

 

 

 

posted @ 2022-07-16 11:52  未央wdq  阅读(307)  评论(0)    收藏  举报