良许Linux教程网 干货合集 单片机存储相关知识

单片机存储相关知识

深度伪原创版本:

本文将分享一些关于单片机存储器方面的基础知识,帮助读者了解常见的存储器类型以及其优缺点。

1. 两种存储器

FLASH存储器

Flash Memory(闪速存储器)是一种安全、高速的存储体,广泛用于嵌入式系统的数据和程序载体。该存储器具备体积小、容量大、成本低、掉电不丢失等一系列优点。

Flash存储器采用区块结构,将物理结构分成若干个物理块,各个区块之间相互独立。

在对Flash存储器进行写操作时,首先必须执行擦除操作,然后才能进行写操作。需要注意的是,Flash存储器只能将数据位由1写成0,而不能将0写成1。擦除操作的最小单位是一个区块,而不是一个字节。

RAM存储器

RAM(Random Access Memory),也称为随机存取存储器,是一种与CPU直接交换数据的内部存储器,速度很快但断电后无法保存数据。

RAM存储器主要用于存储程序中用到的全局变量、堆栈等数据。

2. 三种存储区

map中三种内存

编译完工程会生成一个.map 的文件,该文件的最后说明了ROM和RAM占用空间大小,如下图所示:

image-20231106201315972
image-20231106201315972

其中ROM就是程序烧录到FLASH中的大小,RW就是占用RAM大小.

RO

RO (Read Only ): 只读区域, 需要长久保存,烧录到Flash中,下文的text段和constdata段属于此属性区

RW

RW (Read Write): 可读可写,通常为全局变量和静态变量,下文中的.data段和.bss属于RW区

ZI

ZI (Zero Init): 没有进行初始化或者初始化为0,系统上电时会主动把此区域数据进行0初始化,下文的.bss段就是. 另外, 可翻看Keil工具编译的map文件,Heap和Stack区也进行了Zero的属性标注, 因此,Heap和Stack也可认为是ZI区域

ROM与RAM数据比较

数据段 说明 RAM ROM
.bss true false
.data true true
RO-data 常量 false true
.text false true
stack 局部变量等 true false
heap malloc true false

3. 六段段

image-20231106201320147
image-20231106201320147

程序运行时的5段

.text

.text代码段: 用来放程序代码(code), 在代码编译完成后, 长久只读存放于此,属于图中的代码段

.constdata

.constdata只读常量数据段: const限定的数据类型存放在此,属于图中的常量存储区

.data

用来存放初始化不为0的全局变量(global)和静态变量(static),它是可读可写的,属于图中的静态存储区

.bss

.bss的英文是Block Started by Symbol,翻译过来就是由符号开始的块。此部分类似于数据部分,只是它不占用可执行文件中的空间。

bss通常是指用来存放程序中没有初始化或初始化为0的全局变量和静态变量的一块内存区域,可读可写,属于图中的静态存储区,如果变量未初始化,系统会将变量初始化为0

heap

heap堆区: 通常我们说的动态内存分配,使用malloc/free进行申请和释放,属于动态存储区.

stack

stack栈区: 在代码执行时用来保存函数的局部变量和参数,属于动态存储区.

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部