单片机栈溢出问题现象及解决
近期需要用单片机接收大量数据并解析,程序内创建了大量数组,运行过程中发现部分数组莫名出现杂乱数据,并且程序经常进入Hard Fault中断,排查过后发现单片机栈空间定义过小,程序使用栈空间过大,导致异常。
解决
单片机编译后输出文件中有一个名为xxx.htm
,用文本编辑器打开该文件,开头部分有一行:
Maximum Stack Usage = 1184 bytes + Unknown(Cycles, Untraceable Function)
这里就表示确定使用栈空间1184bytes,还要加上其余不确定的函数等占用空间。
在单片机启动文件开头能找到堆栈空间设置
Stack_Size EQU 0x00000400
...
Heap_size EQU 0x00000200
这两行分别表示栈空间大小和堆空间大小,十六进制数表示,根据需要修改即可,注意不能超出自己使用的单片机允许范围,堆栈空间占用单片机RAM空间。