LOADING...

加载过慢请开启缓存(浏览器默认开启)

loading

单片机栈溢出问题

单片机栈溢出问题现象及解决

近期需要用单片机接收大量数据并解析,程序内创建了大量数组,运行过程中发现部分数组莫名出现杂乱数据,并且程序经常进入Hard Fault中断,排查过后发现单片机栈空间定义过小,程序使用栈空间过大,导致异常。

解决

单片机编译后输出文件中有一个名为xxx.htm,用文本编辑器打开该文件,开头部分有一行:

Maximum Stack Usage =   1184 bytes + Unknown(Cycles, Untraceable Function)

这里就表示确定使用栈空间1184bytes,还要加上其余不确定的函数等占用空间。

在单片机启动文件开头能找到堆栈空间设置

Stack_Size    EQU     0x00000400
...
Heap_size     EQU     0x00000200

这两行分别表示栈空间大小和堆空间大小,十六进制数表示,根据需要修改即可,注意不能超出自己使用的单片机允许范围,堆栈空间占用单片机RAM空间。

showimg