历史上的今天
今天是: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
史海拾趣
|
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?? 十分感谢 … 查看全部问答> |
|
本帖最后由 dontium 于 2015-1-23 13:33 编辑 .mmregs .def _Lmac .text _Lmac .equ $ SSBX OVM ...… 查看全部问答> |
|
大家好,小弟今年学校教这本教材: (原文件名:QQ截图未命名.gif) 引用图片所以想买个板子练练手。。。望哪位大虾有吃灰的,闲置不用的板子转让给俺,仿真器是必须!!!! 学生没有多少米,有最小系统既可,做些简单的 ...… 查看全部问答> |
|
MSP430F149与24LC02B I2C通讯,存储电机脉冲数据,每次动作结束的时候存储一次,用写进去再读出来的方法验证数据是否存储成功,当存储成功时,指示灯亮,不成功时,while循环再次写读指示灯闪烁。问题是:读写成功的机会是随机的,有时候能读写成功 ...… 查看全部问答> |
|
在协议栈中添加了NV_INIT,不知为何第一次无法修改设备逻辑类型,总是以协调器的身份启动 而不是我配置的路由器设备启动。而没加却可以,请问下这是为什么呢? #if defined ( BUILD_ALL_DEVICES ) // The \"Demo\" target is setup ...… 查看全部问答> |




