STM32堆栈溢出引起的问题 变量异常变化且产生Hard Fault

这两天遇到一个很奇怪的问题,在串口通信时串口缓冲区写指针出现异常改变,使用一个vu32的变量累积穿插中断产生的次数,发现该变量变化也异常。并且最终导致Hard_Fault。

一开始怀疑是数组越界,仔细检查没有发现数组访问越界的问题;后来怀疑是系统时钟配置或NVIC配置异常,检查后也没发现问题。

最后整理代码,删掉main函数开始的一个500字节的数组定义(该数组并没有使用到),程序恢复正常。

检查工程的linker配置,发现stack(栈)配置为0x0800(2048)Bytes,heap(堆)配置为0x0200(512)Bytes,所以在main函数中定义500字节数组很可能导致程序运行时堆空间溢出了。

分享到: 更多
版权申明:

本站保留所有原创文章的版权,本站地址:奔跑的博客[http://www.elecbench.com]

原创文章转载时请注明出处,并添加文章所在页面的链接:http://www.elecbench.com/stm32%e5%a0%86%e6%a0%88%e6%ba%a2%e5%87%ba%e5%bc%95%e8%b5%b7%e7%9a%84%e9%97%ae%e9%a2%98-%e5%8f%98%e9%87%8f%e5%bc%82%e5%b8%b8%e5%8f%98%e5%8c%96%e4%b8%94%e4%ba%a7%e7%94%9fhard-fault/

本站所有 2010年3月4日 以后发表、未标明为“转载”的文章均是本站原创。

发表评论?

1 条评论。

  1. 大数组最好放在外部成全局变量,在函粒里定义成static型的0

发表评论


(设置自己的个性头像)

*

申请属于你的免费顶级域名