历史上的今天
今天是:2025年01月13日(星期一)
2020年01月13日 | STM32学习堆和栈(三)
2020-01-13 来源:eefocus
可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。
静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。
栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
堆区:亦称动态内存分配。程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在适当的时候用free或delete释放内存。动态内存的生存期可以由我们决定,如果我们不释放内存,程序将在最后才释放掉动态内存。 但是,良好的编程习惯是:如果某动态内存不再使用,需要将其释放掉,否则,我们认为发生了内存泄漏现象。
按照这个说法,我在.s文件里面设置了:
Heap_Size EQU 0x00000000
也就是,没有任何动态内存分配。
这样,内存=静态存储区+栈区了。
不存在堆!!!
因为我没有用malloc来动态分配内存。
因此,前面提到的一切堆区,其实就是静态存储区。
另外,经过测试,确实是这样。
STM32的内存分配,应该分为两种情况。
1,使用了系统的malloc。
2,未使用系统的malloc。
第一种情况(使用malloc):
STM32的内存分配规律:
从0X20000000开始依次为:静态存储区+堆区+栈区
第二种情况(不使用malloc):
STM32的内存分配规律:
从0X20000000开始依次为:静态存储区+栈区
第二种情况不存在堆区。
所以,一般对于我们开发板例程,实际上,没有所谓堆区的概念,而仅仅是:静态存储区+栈区。
无论哪种情况,所有的全局变量,包括静态变量之类的,全部存储在静态存储区。
紧跟静态存储区之后的,是堆区(如没用到malloc,则没有该区),之后是栈区。

上图是stm32的内存映射图,其中代码区是从0x0800 0000开始的,他的结束地址是0x0800 0000加上实际芯片的flash大小,他的ram的起始地址是0x2000 0000,然后结束地址依然是加上芯片实际的ram大小。
史海拾趣
|
来源:电子设计应用 作者:赵继勇 彭飞 引言 ADC是现代数字解调器和软件无线电接收机中连接模拟信号处理部分和数字信号处理部分的桥梁,其性能在很大程度上决定了接收机的整体性能。在A/D转换过程中引 ...… 查看全部问答> |
|
VS2005:fatal error LNK1104: 无法打开文件“WS2_32.LIB” fatal error LNK1181: 无法打开输入文件“ 我想写个wince上运行的聊天软件,用的是套接字函数。 编译环境是VS2005 我在头文件中作了如下定义: #include #pragma comment(lib,\"WS2_32.LIB\") 就会有如下的错误提示: fatal error LNK1104: 无法打开文件“WS2_32.LIB” 在 ...… 查看全部问答> |
|
城市生活更加复杂使各种新风险应运而生。城市居民收入增加,消费水平提高,生活日新月异,人们日常生活方式和生活工具也出现了新的变化。在需求层次提升的同时,也伴生着新的安全风险。比如,汽车进入家庭,居民出行由“骑自行车”发展成为“驾驶汽 ...… 查看全部问答> |
|
基本特点,只做介绍,不接受评论: 1. 芯片资源足够丰富,一般用于32位嵌入式处理器,当然,8为单片机也可 2. 驱动和应用在PC上开发,使用上位机的开发环境通过usb接口调试(当然,双工总线都可以),支持Windows/Linux/MacOS等多平台。可 ...… 查看全部问答> |
|
如题所问,打算用MSP430F149做个液晶显示装置,MSP430F149电源电压是3.3V,液晶接口电平是5V电压,想尽量简化硬件电路,能否直接和149端口相连,还是必须用3.3V转5V的芯片做缓冲,请实际用过的朋友告知一下,谢谢!… 查看全部问答> |
|
以下的截图出自 HP 的阻抗量测手册 2-7 页。 上图是一般手持式的 LCR 表改采用的自动平衡电挢结构,量测频率最高到 100KHZ,网路上流传的 DIY LCR 电挢都是此种原理。 下图是量测频率 100KHZ 以上的结构图,相信桌上型的 LCR 电挢是这样做, ...… 查看全部问答> |
|
圆点博士 MPU6050 陀螺仪DMP研究和源码 陀螺仪和加速度传感器MPU6050内部集成了DMP,用于计算四元数。经过研究,终于成功应用到圆点博士小四轴飞行器上。 基本应用步骤是: 首先把固件下载到MPU6050,然后通过读取 MPU6050的FIFO,即可以直接获取 ...… 查看全部问答> |
|
小小的电容有十八般武艺,这些你都熟悉吗? 电容器在电子电路中几乎是不可缺少的储能元件,它具有隔断直流、连通交流、阻止低频的特性。广泛应用在耦合、隔直、旁路、滤波、调谐、能量转换和自动控制等电路中。熟悉电容器在不同电路中的名称意义, ...… 查看全部问答> |




