提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
在刚开始写STM32单片机软件的时候,会遇到程序突然跑飞,数据异常等问题。其中很大一部分是数组或指针操作出错导致的内存越界了,需要通过仔细阅读代码进行筛查。曾经遇到过无论怎么找都找不出来,后来只好重新把出现问题功能函数再一个个分开再调用规避了这个问题,后面才知道是因为那个功能函数太大了,超出了配置的栈空间大小。
提示:以下是本篇文章正文内容,下面案例可供参考
一、栈空间的作用
程序中使用到栈(stack)的大小,是由程序根据需求自动分配的,主要用来放局部变量、函数的形参和返回值等。
二、怎么确定我所需要的栈空间的大小?
在MDK中勾选

然后再进行全局编译,然后就能在选定的目标文件夹看到对应的.map和.htm文件了。
打开.htm文件就可以直接在开头看到需要用到的最大栈空间和最大栈空间的调用关系:

当然我们也可以打开.map文件查看里面每个函数对应的堆栈空间的使用量,这里比(理)较(解)复(不)杂(深),就不展开说了。
三、修改栈空间的大小
打开对应项目的.s文件,按照htm文件中最大的栈空间结合一定的裕量进行配置就好了

通过htm文件的数据最大的栈空间使用量为2528Bytes加上未知的函数指针的空间,配置3000Bytes应该是足够了。我这里直接简单粗暴的配置了8192Bytes,其实没必要……
需要注意的是.s文件里面修改的数值是16进制,单位是Bytes。
总结
这里主要是讲了如何快速确认项目软件需要的栈空间,具体的单片机的内存堆栈空间的分配和使用以及优化,还是需要认真的去在.map文件里面查找。对于.map文件内容是如何解读的,还需要自己进一步去了解了
文章讲述了在开发STM32单片机软件时遇到的栈空间不足问题,介绍了栈空间的作用,如何通过MDK生成的.map和.htm文件确定所需栈空间大小,以及如何修改.s文件来调整栈空间配置。强调了理解和优化堆栈空间对避免程序异常的重要性。
1万+

被折叠的 条评论
为什么被折叠?



