单片机内存分布

文章详细介绍了STM32的FLASH内存结构,包括文本段、只读段和数据复制段,以及RAM中的.data、.bss段、堆和栈的分布。栈区存放函数局部变量和中断入口,堆区用于动态内存分配。此外,文章还提到了小端存储模式在单片机中的应用。
摘要由CSDN通过智能技术生成

FLASH主要用于存放代码和数据。地址从0x0800 0000开始的,是向上增长的。

Flash可以分为文本段、只读段、数据复制段。文本段可以分为可执行代码和常量。

数据复制段存放STM32的flash是从地址0x0800 0000开始的,是向上增长的

一、内存组成

从内存高地址到内存低地址,依次分布着栈区、堆区、全局区(静态区)、常量区、代码区,其中全局区中高地址分布着.bss段,低地址分布着.data段。

ram中包含了如下几个部分:

1、.data 段: 存放初始化为非 0 值的全局变量

2、.bss段 : 存放未初始化或者是初始化为 0 的全局变量

3、堆 (heap)区 : 由 malloc 申请,由 free 释放。用于存放程序在运行时,所需要动态申请、删除的内存段。

4、栈 (Stack) 区: 由系统自行分配、释放。存放局部变量、函数入参和函数的返回值。

5、 常量区:存放不可修改的值,如定义的字符串,常量变量等。

6、代码区:存放代码可执行文件。

其中data和bss比较好理解就是一些全局变量。堆和栈的空间可以由我们来自由设定如下图所示,只要这些部分加起来不超过STM32的RAM空间。

 Stack Size 定义了栈空间   Head Size定义了堆空间。

存放函数执行时的局部变量、中断入口,函数运行时消耗的空间为栈空间,结束时释放对应的空间。堆是手动申请得到的空间,主要通过 malloc、new等函数申请,但是使用结束时需要通过free delete函数释放已申请的空间,否则会造成内存泄漏。

二、大小端存储问题

单片机中采用小端存储,即低位在前,高位在后。如下图所示。

                                                         图-1 RAM中的大小端

                                                         图-2 ROM中的大小端

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值