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

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

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

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

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

版权申明:

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

原创文章转载时请注明出处,并添加文章所在页面的链接:https://www.elecbench.com/1036/

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

发表评论?

1 条评论。

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

发表评论


(设置自己的个性头像)

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