标签:hardfault fault hard 断点 越界 数组 异常
在一个月黑风高的下午,写完程序一上电就发生了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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。