全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 控制/MCU >

关于STM32存储的堆栈地址

时间:2022-06-05 16:37

人气:

作者:admin

标签: STM32  sram 

导读:...

由c/C++编译的程序占用的内存分为以下几个部分

1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。

3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。-程序结束后有系统释放

4、文字常量区—常量字符串就是放在这里的。程序结束后由系统释放

5、程序代码区—存放函数体的二进制代码。

pYYBAGKYddeAREVgAASmCfjjtMk801.png

STM32的地址空间映射图

我们可以看到代码存储区域在CODE区域;

STM32的堆栈是存放在片上静态SRAM中的,地址分配可以见Keil的编译map文件:

代码来源地址:https://download.csdn.net/download/emoeror_zhang/11286638

HEAP0x20000148Section512startup_stm32f10x_hd.o(HEAP)

STACK0x20000348Section1024startup_stm32f10x_hd.o(STACK)

__initial_sp0x20000748Data0startup_stm32f10x_hd.o(STACK)

上面节选中,HEAP是堆的基地址,__initial_sp是栈指针。示意图如下

pYYBAGKYdeaAagmNAACNKStVFbc164.png

堆栈地址的设置

在上述图和map中,我么可以看到堆的大小是0线0x200,也就是在0x20000148-0x20000348之间,而栈的地址大小是0x400,也就是在0x20000348-0x20000748。为什么他们的大小是这样的,是怎么由来的呢?

打开汇编文件startup_stm32f10x_hd.s,我们可以找到相对应的设置堆栈大小的程序,如图:

poYBAGKYdfqAIeAdAADmPvi82uU094.png

堆和栈,一般堆是由低地址往上增长,栈是由往下减少。都是连续的,C语言不提供内存保护机制类似的功能,如果堆一直增长,栈一直申请,然后就会导致栈溢出,从而导致程序崩溃。

变量储存位置分析

同样的,我们还是以上述的map文件为例子进行分析。

pYYBAGKYdg2AMF5EAASKMxLkq5M724.png

如图所示,fac_ms和fac_us在程序中是static变量类型,储存在0x20000000-0x20000148之间的位置,fac_ms在0x20000016,fac_us在0x20000014,那其他的地址处是什么数据呢?

继续在map里面寻找,找到如下图所示:

pYYBAGKYdhqAJswbAAJueeLqXBM513.png

pYYBAGKYdi2AIM_dAAElpGJE-zs610.png

发现其余的地质处储存了全局变量数组,以及引用的库文件的全局变量。

在map里面我们看到,全局变量和静态变量储存的位置,和堆栈无关,那么堆栈储存的内容是什么呢?

五、堆栈存放内容

1、栈区

存放函数的参数值,局部变量的值等等临时变量,退出该作用域该临时变量就会自动释放。

2、堆区

系统会给每个程序分配一部分栈空间让他们能够运行起来,问题就是栈空间必然存在不够用的问题,而堆不属于程序,堆是独立的,是公用的。只要你malloc(sizeof(SIZE_YOU_WANT)),就可以得到相应一部分的堆空间。

简单的来说,就是当你使用的时候malloc申请一部分空间来使用,但是别忘记了使用完成之后free掉,不然往往会堆溢出,占用了栈的位置空间,导致程序奔溃。

总结:

如果我们设置了堆的空间大小,但是我们程序中没有进行malloc申请,那么在程序事假运行的时候,我们栈的空间超过本身设置的空间,进入到堆里面,那么程序是不会出错的,但是超过了堆的空间了,进入到全局变量区域,就会出现莫名其妙的错误。

不使用malloc,我们可以将堆设置成0,这是没有问题的,但是栈的空间大小要设置成合适的,不然就会因为栈溢出,进入harderror,程序奔溃。

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信