单片机的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单片机的上电内存读取过程,如果搞明白了这块收获会是非常大的。后面有机会我也会对这块进行深入的总结,并整理成文章发出来,与大家一起分享。

技术迭代升级,直写光刻技术前景可期
2020年福布斯中国富豪榜:马云和马化腾分别占领第一二名
5G的到来,会对安防产生哪些新的变化
TinyFlashDB:一种超轻量的可纠错的通用单片机Flash存储方案
Genesis电路板设计软件之configuration参数设置详情解析
单片机的RAM和FLASH认识理解
多维科技推出TMR6209,可检测金融票据上的磁性材料分布
液晶拼接屏的安装技巧有哪些
区块链行业的判断:首先得有杀手级的应用
锰酸锂电池是什么?锰酸锂电池会受到什么影响
Marvell 庆祝 25 周年技术创新
突破屏幕阻隔:OriginOS推出“变形器”功能
盘点2021年直线电机3D打印技术在汽车领域的典型应用
通过外形标志和标准封装代号判别常用晶体管的引脚排列
国产芯片缺货潮来袭,芯片缺货连锁反应显现
MOS管和三极管的差异
实验室恒温恒湿箱中的试验样品摆放空间说明
开关电源工作频率不正常怎么办
一个用rust制造的新的现代操作系统Aero
HLS协议实现