一篇文章讲透单片机的RAM和FLASH
最近在一个问答社区回答了一个问题,关于单片机存储器的,于是有了想专门写一篇关于单片机存储器的想法。作为单片机内部一个重要组成部分,存储器占有很重要的地位,今天就来聊聊我对于单片机的内部存储器RAM和FLASH的一些认识和理解。
1、先聊聊存储器
存储器是单片机结构的重要组成部分,存储器是用来存储编译好的程序代码和数据的,有了存储器单片机系统才具有记忆功能。按照存储介质的特性,可以分“易失性存储器”和“非易失性存储器”两类。易失性存储器断电后,里面存储的内容会丢失;非易失性存储器断电后,数据可以依然保持。
存储器分类
2、单片机的存储器
如下图所示是STM32F103RB系列单片机所使用的存储器大小,Flash为128KB,RAM为20KB,这里的RAM是指SRAM。
STM32F103RB内存大小
这两个存储器的寄存器输入输出端口被组织在同一个4GB的虚拟线性地址空间内。可访问的存储器空间被分成8个主要块,每个块为512MB。Flash用来存储编译好的程序文件,SRAM用来存储运行程序时所创建的临时数据。所以如果不加入外置存储器,那么程序里的东西就会出现在这两个存储器中。
下图为STM32F103RB单片机的内存映射图(部分),可以看到画红圈的两个就是SRAM和Flash存储器。不知道大家有没有注意,当使用J-Flash软件给stm32下载bin文件的时候需要填写起始地址,那个0x08000000其实就是Flash存储器的起始地址。
STM32F103内存映射图
3、关于编译器生成的文件
如果你玩过单片机,那你应该对Keil这款软件不会感到陌生,下图是我的那款OLED时钟的软件用Keil编译后的编译信息。
KEIL编译信息
很多人并不一定知道Program Size的含义,我来给大家解释一下。
Code: 是程序中代码所占字节大小;
RO-data: 程序只读的变量,也就是带const的,和已初始化的字符串等;
RW-data: 已初始化的可读写全局/静态变量;
ZI-data: 未初始化的可读写全局/静态变量;
那么这个程序占用的Flash存储器的空间大小是多少呢?程序所占Flash空间大小=Code+RO data+RW data=生成的bin文件大小 。
那么这个程序占用的SRAM存储器的空间大小是多少呢?程序固定占用RAM大小=RW data+ZI data 。
这些信息除了在编译器下方的信息栏里面看到,也可以在项目文件里的.map文件的最下面找到,如下图:
.map文件信息
4、数据在存储器上的存储结构
程序在Flash上的存储结构如下图所示,通过阅读hex文件和MDK下调试综合提炼出来的。其中,ZI-data对应未初始化数据段,RW-data对应已初始化数据段,Code对应代码段。
STM32的Flash存储结构
数据在SRAM上的结构,如下图所示。这部分大家可以参考上面的内存映射图来理解。
STM32的SRAM存储结构
5、总结
至此我相信大家应该对stm32单片机的内部存储有了更进一步的认识。其实如果想更深入的了解单片机的运行轨迹,我建议大家来详细研究一下stm32单片机的上电内存读取过程,如果搞明白了这块收获会是非常大的。后面有机会我也会对这块进行深入的总结,并整理成文章发出来,与大家一起分享。
为啥单片机RAM那么少?
你肯定好奇:手机内存(RAM)动辄8G、12G,为啥单片机RAM连1M都不到?
经典的AT89C51单片机,其内部只有128字节RAM (内存),同样经典的MSP430F149也只有2K的RAM空间。
即使现在用的比较多的STM32F1系列,其最大的RAM也不到100K 。
很多小伙伴就有这样的疑问:现在固态硬盘都以 T 为单位了,手机电脑内存都是8G、甚至32G了,为什么单片机RAM连1M都不到?
今天就来讲讲关于RAM以及单片机内存少的几点内容。
(备注:本文说的单片机,指MCU,微控制器)
关于RAM
RAM:Random Access Memory,随机存取存储器,也是大家所说的内存 。
RAM是一种易失性存储器,也就是说断电就会丢失存储数据。
RAM有一些常见特点:
随机存取
易失性
对静电敏感
访问速度块
······
随着需求的提高,技术的进步,RAM又发展了像SRAM、DRAM、SDRAM等多种类型的RAM存储器。
相对于Flash、硬盘等非易失性存储器而言,RAM具有更快的读写速度,因此RAM广泛用于各种单片机、嵌入式、计算机系统中。
但RAM也存在一些“不足”,导致在很多场合,RAM的容量都相对比较小。
RAM容量小的几点原因
RAM相对Flash、硬盘而言,要做到足够大容量,其成本相对Flash要多的多。
1.RAM工艺更复杂
RAM要求速度更快,电流又不能太大,为了能尽量满足和平衡更高要求,就需要使用更特殊和更先进的半导体电容技术。
2.更大的硅面积
因为RAM的工艺更复杂,其占用硅面积相对更大。
大家应该都知道芯片的制造过程 ,目前芯片主要使用硅这种材料制作芯片(当前,现在也发明了更先进的材料),占用硅面积更大,意味着单个芯片成本更贵,相信这个原理大家都懂。
通过认识wafer、die、cell它们的关系 你就能大概理解芯片其实是“批量”生成的。
3.功耗原因
单片机通常要求功耗不能太多,特别是低功耗的单片机,在待机模式下,要求nA级别的电路。
为了满足低功耗,单片机中RAM,通常是静态RAM(SRAM)。
这里要扩展一下与SRAM对应的DRAM(动态RAM),顾名思义,动态RAM就是需要定时给电容补充漏掉的电荷,也就是需要定时刷新,DRAM需要驱动电路,功耗相对SRAM自然更大。
4.单片机大容量RAM需求不大
大家都知道,使用单片机开发的项目,通常都是裸机,或者RTOS,一般不会用到大型软件,特别是早期的时候(早期少数对RAM有需求的项目,一般通过外扩RAM的方式)。
所以,早期很多项目对单片机RAM容量要求不高,甚至有很大一部分RAM都没有用到。
当然,随着UI、AI、物联网的快速发展,现在对单片机RAM的需求也在不断增加,很多新出的单片机RAM容量也在不断增加,比如256K,甚至512K了。
5.其他
除了以上说的几点,还有像寿命、稳定性、兼容性等也是间接影响RAM大小的因素。
最后,欢迎大家补充更多的原因。
声明: 本文转载自strongerHuang,如涉及作品内容、版权和其它问题,请于联系工作人员,我们将在第一时间和您对接删除处理!
相关问答
单片机 的存储器 ram 的寻址范围?外部RAM的寻址范围是0000H~FFFFH。单片机则是根据单片机指令来区分内部与外部RAM的。使用MOVX命令就使用外部RAM,使用MOV命令就指向内部RAM,所以,尽管0~255...
51 单片机 中 ram 由哪几个区构成?MCS-51单片机内部RAM可分为5个区:1、存储矩阵区:RAM的核心区域是一个寄存器矩阵,用来存储信息,称为存储矩区。2、地址译码器区:地址译码器区的作用是将寄...
请解释一下51 单片机 字节 地址 ?51单片机的位地址和字节地址,一般指的是单片机的RAM数据存储器地址,字节地址有低128个字节RAM数据存储器,地址00H-7FH和高128字节的特殊功能存储器,地址80H-FF...
【 单片机 作业求救!1、编程将外部 RAM 首 地址 为2000H的6个单元...[最佳回答]1:RMD:MOVR2,#0MOVDPL,#0RMDP:MOVDPH,#20HMOVXA,@DPTRMOVDPH,#30HMOVX@DPTR,AMOVDPH,#10HMOVA,R2MO...
【 单片机 题目一套,2、在程序运行中,PC的值是.A、当前正在执...[最佳回答]给你回答一部分吧.选择题:2C3A4B5D填空题:2位单元名称,位单元地址3EA低电平2us4BA512,246低电平触发,下降沿触发7注释操作码8128工作寄存器区...
试写出AT89C-51 单片机 片内外Rom和 RAM 的 地址 空间-ZOL问答AT89C51单片机片内Rom:4K字节;RAM:128字节。AT89C51单片机片外Rom:60K字节;RAM:64K字节。重叠的地址空间单片机是如何区分的?单片机并不认为有重叠的地址...
单片机 中,ROM, RAM ,和各种寄存器的功能是什么, 地址 和数据存放...RAM存临时数据(单片机内所有的寄存器都是定义在RAM中的,另外,RAM也空出了一部分地址给用户使用,堆栈就可以在这里建立)地址:你得明白地址是个什么东西,是通过门...
8031 单片机 的片内 ram ,sfr,片外 ram 和rom存储空间配置 地址 依次为什么?片内RAM地址为:00H~7FHSFR地址为:80H~FFH片外RAM和ROM地址均为:0000H~FFFFH片内RAM地址为:00H~7FHSFR地址为:80H~FFH片外RAM和ROM地址均为:...
AT89S51 单片机 中特殊功能寄存器(SFR)使用片内 RAM 的部份字节 地址 为什么对,用了哪些 地址 啊?00~7FH与你说的一样,是数据存储器,你也说了80H~FFH是SFR的映射,什么是SFR,就是特殊功能寄存器,在51里就代表如P0,P1,P2,P3,SBUF等等这些与硬件直接相关的...0...
51 单片机 片内 RAM地址 的作用?内部RAM共256个单元,用户使用前128个单元,用于存放可读写数据,后128个单元被专用寄存器占用。前128单元具体分为:1、工作寄存器区:共4个组,每组为8个存储...