STM32栈空间的配置

文章讲述了在开发STM32单片机软件时遇到的栈空间不足问题,介绍了栈空间的作用,如何通过MDK生成的.map和.htm文件确定所需栈空间大小,以及如何修改.s文件来调整栈空间配置。强调了理解和优化堆栈空间对避免程序异常的重要性。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

在刚开始写STM32单片机软件的时候,会遇到程序突然跑飞,数据异常等问题。其中很大一部分是数组或指针操作出错导致的内存越界了,需要通过仔细阅读代码进行筛查。曾经遇到过无论怎么找都找不出来,后来只好重新把出现问题功能函数再一个个分开再调用规避了这个问题,后面才知道是因为那个功能函数太大了,超出了配置的栈空间大小。


提示:以下是本篇文章正文内容,下面案例可供参考

一、栈空间的作用

程序中使用到栈(stack)的大小,是由程序根据需求自动分配的,主要用来放局部变量、函数的形参和返回值等。

二、怎么确定我所需要的栈空间的大小?

在MDK中勾选
在这里插入图片描述
然后再进行全局编译,然后就能在选定的目标文件夹看到对应的.map和.htm文件了。
打开.htm文件就可以直接在开头看到需要用到的最大栈空间和最大栈空间的调用关系:
在这里插入图片描述
当然我们也可以打开.map文件查看里面每个函数对应的堆栈空间的使用量,这里比(理)较(解)复(不)杂(深),就不展开说了。

三、修改栈空间的大小

打开对应项目的.s文件,按照htm文件中最大的栈空间结合一定的裕量进行配置就好了
在这里插入图片描述
通过htm文件的数据最大的栈空间使用量为2528Bytes加上未知的函数指针的空间,配置3000Bytes应该是足够了。我这里直接简单粗暴的配置了8192Bytes,其实没必要……
需要注意的是.s文件里面修改的数值是16进制,单位是Bytes。

总结

这里主要是讲了如何快速确认项目软件需要的栈空间,具体的单片机的内存堆栈空间的分配和使用以及优化,还是需要认真的去在.map文件里面查找。对于.map文件内容是如何解读的,还需要自己进一步去了解了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值