历史上的今天
返回首页

历史上的今天

今天是:2025年01月13日(星期一)

正在发生

2020年01月13日 | STM32的堆栈(Heap&Stack)空间

2020-01-13 来源:eefocus

最近做的一个项目遇到一个很莫名的错误,程序运行到某一部分时便会卡死,分析后,感觉在逻辑上并无错误,但是就是会卡死,而且不是偶然。 


后来在网上查找资料怀疑是内存溢出,然后调试发现是两个函数中的的局部变量申请的内存空间太大,所以错误应该是栈溢出了。将这两个变量使用malloc申请堆段空间完美解决。


下面是对STM32的堆栈(Heap&Stack)小结:

内存分配空间 

内核保护区

栈段

堆段

数据区

代码区

代码区 :静态区 

常量(const) 

函数代码逻辑


数据区:静态区 

全局变量 

局部变量+static


堆段:动态区,管理者是程序员 

malloc申请的空间


栈段:动态区,管理每个子函数的空间,管理者是操作系统 

局部变量


内核保护区


STM32的启动文件中,开始便定义了堆栈的空间大小:

启动文件部分截图

Stack_Size 0x400 => 100 0000 0000 => 1024Byte =>1KByte 

Heap_Size 0x200 =>10 0000 0000 =>512Byte


推荐阅读

史海拾趣

问答坊 | AI 解惑

在晒一块官方网上的开发板NXP LPC1768

  mbed NXP LPC1768     哈哈,这个按键太帅了,像颗宝石!…

查看全部问答>

wavescan 可以一下子读入批量psf吗?

cadence 中的 wavescan 能够一下子读取多个psf吗? 比如ocean产生多个corner的结果,放在不同的路径下。 sx可以实现,不过sx的结果会有一点点差别,所以不是很愿意用。 我试着找些文档,看看能否用skill/tcl等command的方式进行,不过没有找到。 ...…

查看全部问答>

vs2005下安装platform builder插件后设置winceroot问题

先安装好vs2005,再装上Embedded CE 6.0   用vs2005建立Platform Builder for CE 6.0工程时,提示要先设置好 WINCEROOT才能使用。 请问高人,怎么设置WINCEROOT?? 十分感谢 …

查看全部问答>

万利的板子现在还能199买到吗?人在深圳。

                                 Re:…

查看全部问答>

关于MPY和MAC的溢出饱和问题

本帖最后由 dontium 于 2015-1-23 13:33 编辑      .mmregs      .def  _Lmac      .text _Lmac  .equ $      SSBX   OVM ...…

查看全部问答>

求购闲置的DSP板子!!!!!!

大家好,小弟今年学校教这本教材:   (原文件名:QQ截图未命名.gif) 引用图片所以想买个板子练练手。。。望哪位大虾有吃灰的,闲置不用的板子转让给俺,仿真器是必须!!!! 学生没有多少米,有最小系统既可,做些简单的 ...…

查看全部问答>

24LC02B有时候不能读写

MSP430F149与24LC02B I2C通讯,存储电机脉冲数据,每次动作结束的时候存储一次,用写进去再读出来的方法验证数据是否存储成功,当存储成功时,指示灯亮,不成功时,while循环再次写读指示灯闪烁。问题是:读写成功的机会是随机的,有时候能读写成功 ...…

查看全部问答>

寻创业合作伙伴

寻志同道合,愿在工控领域创业的合作伙伴。因我们是技术类人员,因此创业合作伙伴希望是市场类人员。基本要求,有创业的热情、人品端正、能吃苦,对工控行业有较深入的理解。地点:西安请将个人情况介绍发至xaqtdz@126.com, 我们见面详谈,真诚感谢 ...…

查看全部问答>

有关修改设备逻辑类型的问题?

在协议栈中添加了NV_INIT,不知为何第一次无法修改设备逻辑类型,总是以协调器的身份启动 而不是我配置的路由器设备启动。而没加却可以,请问下这是为什么呢? #if defined ( BUILD_ALL_DEVICES )   // The \"Demo\" target is setup ...…

查看全部问答>

恭请诸位前辈入内

本人初学单片机,菜鸟一只。对51、PIC、MSP430有初步了解,写过几个程序,以前在学校学过模电、数电,但是基本还给老师了。如果要从事电子行业,请问诸位前辈有没有什么建议?谢谢!…

查看全部问答>