一篇文章讲透单片机的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单片机的上电内存读取过程,如果搞明白了这块收获会是非常大的。后面有机会我也会对这块进行深入的总结,并整理成文章发出来,与大家一起分享。
浅谈单片机的FLASH存储器结构和功能
本文小编将向读者阐述stm8 八位单片机的FLASH结构和功能。
STM8S 的FLASH由两部分存储器组成:
FLASH程序存储器;
数据EEPROM(选项字节OPT Byte就存放在这个区)
读者如果困惑FLASH和EEPROM有什么区别,小编在这里给大家做个简要说明。
FLASH按扇区操作,EEPROM则按字节操作,二者寻址方法不同。FLASH的电路结构较简单,适合用作程序存储器,EEPROM则更多的用作非易失的数据存储器。在数据处理上,FLASH主要用于存续程序代码,EEPROM用于在程序运行时保存一些需要掉电不丢失的数据,如LCD显示频在每次开启单片机时显示的数据的保存(RAM是用做单片机运行时的临时数据存储器,如定义的一些临时变量)。 它们的地址分配我们来看图1。
图1 FLASH存储器
从图 1 我们来分析FLASH的组织结构。它包括:用户启动区域(UBC)、数据EEPROM(DATA)、主程序区、选项字节(Option byte)。
1.用户启动区:它是程序IAP模式下程序启动入口,包含中断向量表和复位信息,在用户启动区的初始位置存放中断向量。程序一般从复位信号发出后开始从中断向量表向下执行。
图2 用户启动区地址分布
2.数据EEPROM:可存储一些重要数据,不会因断电而失去这些数据。
3.主程序区:我们的代码经编译后通常存储在这个区域。
4.选项字节:在对一些保护数据进行访问,或者使用stm8的端口复用功能时,需要对选项字节进行操作。
图3 选项字节的映射功能表
通过对FLASH的认识,我们对单片机CPU的内存就有一个更深刻的认识啦。
相关问答
单片机flash 读取速度是多少?速度是100MHz的工作频率,因为C8051F120就达到了100MHz的工作频率,没有加延迟就以这么高的速度运行。但像STM32,在48MHz有1周期的延迟,72MHz有2周期延迟,所...
单片机 外挂一个人spi的 Flash ,怎么操作是明白的,但是具体的原理呢, 单片机 通过so,嗖嗖嗖过去?事实上Flash有一套自己定义的协议。你仔细分析一下你发送给FLASH的数据就会明白。通常的做法是需要单片机先告诉flash我需要读还是写,什么位置,多少字节,如果...
flash单片机 与mcu一样吗?1.flash单片机和mcu(microcontrollerunit)在某种程度上可以说是相同的,但也有一些细微的区别。2.mcu是指一种集成了处理器核心、存储器、外设接口和其他功...
j- flash 使用教程?一、使用J-Flash读单片机的Flash数据,并保存。打开J-Flash,选择好单片机的型号二、使用J-Flash读单片机的optionbyte。当把Flash中的数据读回后,就可以顺便...
用51 单片机 对nandflash进行读写以实现大容量存储要注意什么?其实没啥需要特别注意的。要说的话对于初学者需要注意电源别弄错了;如果电源域不同,则需要确认管脚电气参数是否匹配,必要时添加接口转换芯片;剩下的就是按照...
单片机 S51和S52的区别,请具体些?单片机S51和S52,52的FLASHROM为8k,比51大4k,还有52比51多了一个定时器2。其他硬件资源基本一样。单片机S51和S52,52的FLASHROM为8k,比51大4k,还有5...
单片机 中ram与rom的关系是什么?首先感谢系统的邀请,关于回答单片机中RAM和ROM的关系。现在单片机种类型号非常多,最常见的是MCS51系列单片机,同时还有PIC系列单片机、AVR系列单片机、ARM系列...
单片机 烧程序只能烧一次吗?为什么?不是的,现在的单片机都是flash的程序存储器,利用flash这种工艺做的存储器可以少些至少20000次以上,因此一般在学习中不需要考虑说是烧了几次后单片机就坏了。...
MSP430 单片机 中把数据放到 Flash 中,断电后数据后丢失吗?不会丢失的。但是你在初始化的时候可能有一个擦写flash的语句。这个你要设置一个标志,第一次上电的时候擦写flash,以后重启的时候就不再擦写。你可以自己将fl...
单片机 boot引脚功能?单片机的boot引脚是用于引导启动芯片的引脚,通常在启动时用来加载程序或者固件。当boot引脚被拉低时,单片机会从外部设备如Flash存储器中加载程序或者固件。...