MCU的存储器介绍及内存分布

RAM:

首先RAM是我们常人理解的运行内存。存储在这里面的内容断电以后就没了,再次上点以后就要重新开始了。不同的关键字修饰它可能就会不太一样。
常用的static变量,全局变量,局部变量这些都是再RAM内,但是RAM可以分为三个区域。堆、栈、静态存储区

1、 由程序员自动分配(malloc)以及释放,这里的释放很关键,一定要在使用完成后释放内存(free)!!!
2、编译器自动分配的,局部变量,函数的一些形参都会存储在这个区域
3、静态存储区:这里存放的就是初始化的全局变量和static修饰的变量,这里注意只要是static修饰的变量都是存放在静态存储区的。


ROM/FLASH:

关于ROM和flash,flash是ROM的一种;
所有的常量,只读变量,还有代码都是存储在flash的。

SRAM(Static Random-Access Memory):静态随机存储器,所谓的“静态”,是指这种存储器只要保持通电,里面储存的数据就可以恒常保持。

DRAM(Dynamic Random Access Memory):动态随机存储器,每隔一段时间,要刷新充电一次,否则内部的数据即会消失。

SDRAM (synchronous dynamic random-access memory):同步动态随机存取内存,是有一个同步接口的动态随机存取内存(DRAM)。通常DRAM是有一个异步接口的,这样它可以随时响应控制输入的变化。

NAND闪存(NANDFLASH)是一种比硬盘驱动器更好的存储设备,是一种非易失性存储技术,即断电后仍能保存数据,经常用来存储运行的代码。

NorFlash:简单来说与sdram与Nand的中间品,它能像sdram一样直接读,但是又得像nand一样编程擦写。因此程序可以直接在nor里跑,速度要比sdram慢一些,往nor里写数据必须先擦除,因为nor的每一位只能由1变为0。NORFLASH支持字节操作,而SDRAM是以单个sector操作的。

FMC(Flexible Memory Controller): 译为可变存储控制器。它可以用于驱动包括SRAM、SDRAM、NOR FLASH以及NAND FLSAH类型的存储器。

FSMC控制器(Flexible Static Memory Controller):译为可变静态存储控制器,所以它们不能驱动SDRAM这样的动态存储器,因为驱动SDRAM时需要定时刷新.

程序内存的分配:

Program Size 包含以下几个部分:

1)Code:代码段,存放程序的代码部分;(存在flash中)

2)RO-data:只读数据段,存放程序中定义的常量,只读属性,比如const 修饰;(存在flash中)

3)RW-data:读写数据段,存放初始化为非 0 值的全局变量;(保存在flash中,运行时搬运到RAM中)

4)ZI-data:0 数据段,存放未初始化的全局变量及初始化为 0 的变量;(存在RAM中)

Program  RAM  Size :RW-data + ZI-data

Program  Flash Size :Code + RO-data + RW-data。

 其中动态内存堆为未使用的 RAM 空间,应用程序申请和释放的内存块都来自该空间。

列子:

#include <rtthread.h>

const static rt_uint32_t sensor_enable = 0x000000FE; /* 属于常量,放在flash的RO段*/

rt_uint32_t sensor_value;/*属于全局未初始化变量,放在RAM中的 ZI段*/

rt_bool_t sensor_inited = RT_FALSE;/*属于全局初始化变量,放在RAM中的 RW段*/

void sensor_init()/* 函数地址,局部变量 放在栈中*/
{
int status;       /* 局部变量放在栈中*/
     /* ... */
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值