打印
[STM32F1]

数组越界与HardFault异常中断问题

[复制链接]
634|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shipeng1989|  楼主 | 2022-4-28 14:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近遇到一个当时看来无法理解的问题:当调用一个函数后在函数执行过程中一切正常,但是只要函数执行完成后要返回时就会触发HardFault异常中断,时间过去了好几天了记得当时好像是提示内存地址异常还是啥来着,具体记不清了。之前我也遇到过类似的HardFault问题后面发现是一个临时变量的数组太长了导致堆栈溢出了,现象就是只要操作这个数组就会触发HardFault,但这次的情况却不尽相同:函数执行过程中并没有触发HardFault,而是在函数将要返回时触发HardFault,一是让我无所适从。后面抱着死马当活马医的心态还是决定找一找函数中的数组有没有问题,结果发现果然还是有一个数组写入存在越界的问题改正之后HardFault问题解决!
那么为啥这次没有在操作函数越界时触发HardFault,而是在函数返回时才触发HardFault?在此我强行给个解释(不一定对):应该是发生数组越界时破坏了系统的堆栈数据,在函数执行中并不会用到这些数据所以不会影响到函数的执行,但是当函数返回要出栈了这时错误的数据就被系统调用了所以才会触发HardFault。如果分析的不对希望高人指正。

使用特权

评论回复
沙发
caoenq| | 2022-4-29 09:02 | 只看该作者
我觉得你分析的很有道理

使用特权

评论回复
板凳
kaif2n9j| | 2022-5-5 15:49 | 只看该作者
我觉得你还是把数组压缩一下,就是别超了,就好了

使用特权

评论回复
地板
q1ngt12| | 2022-5-5 17:13 | 只看该作者
有可能数组里面数据错误就会导致芯片复位的

使用特权

评论回复
5
g0d5xs| | 2022-5-5 18:45 | 只看该作者
本帖最后由 g0d5xs 于 2022-5-5 18:47 编辑

  我之前遇到过一次,就是数据搞超了,然后设备重启(因为我加了WDT)

使用特权

评论回复
6
zhizia4f| | 2022-5-6 12:32 | 只看该作者
这个只能是碰,查查数组内容之类的,看看对不对

使用特权

评论回复
7
q1d0mnx| | 2022-5-6 14:03 | 只看该作者
你这是跑操作系统了么?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

134

帖子

1

粉丝