作为单片机内部一个重要组成部分,存储器占有很重要的地位,今天就来聊聊我对于单片机的内部存储器RAM和FLASH的一些认识和理解。

1、先聊聊存储器

存储器是单片机结构的重要组成部分,存储器是用来存储编译好的程序代码和数据的,有了存储器单片机系统才具有记忆功能。按照存储介质的特性,可以分“易失性存储器”和“非易失性存储器”两类。易失性存储器断电后,里面存储的内容会丢失;非易失性存储器断电后,数据可以依然保持。

2、单片机的存储器

如下图所示是STM32F103RB系列单片机所使用的存储器大小,Flash为128KB,RAM为20KB,这里的RAM是指SRAM。


这两个存储器的寄存器输入输出端口被组织在同一个4GB的虚拟线性地址空间内。可访问的存储器空间被分成8个主要块,每个块为512MB。Flash用来存储编译好的程序文件,SRAM用来存储运行程序时所创建的临时数据。所以如果不加入外置存储器,那么程序里的东西就会出现在这两个存储器中。

下图为STM32F103RB单片机的内存映射图(部分),可以看到画红圈的两个就是SRAM和Flash存储器。不知道大家有没有注意,当使用J-Flash软件给stm32下载bin文件的时候需要填写起始地址,那个0x08000000其实就是Flash存储器的起始地址。

3、关于编译器生成的文件

如果你玩过单片机,那你应该对Keil这款软件不会感到陌生,下图是我的那款OLED时钟的软件用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文件的最下面找到,如下图:

4、数据在存储器上的存储结构

程序在Flash上的存储结构如下图所示,通过阅读hex文件和MDK下调试综合提炼出来的。其中,ZI-data对应未初始化数据段,RW-data对应已初始化数据段,Code对应代码段。

数据在SRAM上的结构,如下图所示。这部分大家可以参考上面的内存映射图来理解。

5、总结

至此我相信大家应该对stm32单片机的内部存储有了更进一步的认识。其实如果想更深入的了解单片机的运行轨迹,我建议大家来详细研究一下stm32单片机的上电内存读取过程,如果搞明白了这块收获会是非常大的。

一篇文章讲透单片机的RAM和FLASH相关推荐

  1. 【密码学】 一篇文章讲透数字证书

    [密码学] 一篇文章讲透数字证书 数字证书介绍   数字证书是一种用于认证网络通信中参与者身份和加密通信的证书,人们可以在网上用它来识别对方的身份.   我们在上一篇博客中介绍了数字签名的作用和原理, ...

  2. 总线全称_一篇文章讲透I2C总线协议

    最近一段时间工作上比较忙,一直没有抽出空来写文章与大家分享,这两天腾出些时间静下心来沉淀一番.看标题大家已经知道了是来总结I2C总线,我相信大家或多或少的都接触过I2C总线,这篇文章我们就由浅入深的仔 ...

  3. 一篇文章讲透控制反转和依赖注入

    https://www.jianshu.com/p/07af9dbbbc4b 转载链接:http://blog.xiaohansong.com/2015/10/21/IoC-and-DI/# http ...

  4. 百度排名批量查询_一篇文章讲透百度霸屏引流细节思路与极其简单的操作玩法...

    点评:百度霸屏引流现在常规的操作套路大部分都是挖掘关键词铺文章,核心就是拼文章内容,文章数量和平台,平台有了,文章有了,内容不行,上首页也很难转化,还是要在内容上多下功夫. 废话不多说,我们今天来聊聊 ...

  5. 一篇文章讲透线上应用监控

    "线上服务停了,要重启一下"?久经职场做研发的程序员,视线会逐渐转移到线上应用的运行状态.设想一下,如果你在半夜两点正在酣眠美梦时,微信群里突然炸开锅:"服务停了,先重启 ...

  6. 一篇文章讲透yolo v1-v7

    YOLO V7出来的时候,有朋友跟我吐槽:V5还没闹明白呢,又来个V7,太卷了. 我找来了深耕目标检测的朋友张老师,从V1到V7,给各位做一次YOLO的系统分享. 张老师在辅助驾驶领域深耕多年,主要研 ...

  7. 用计算机怎么做蒙特卡洛模拟,一篇文章讲明白蒙特卡洛模拟

    先来个测试题: 用仿真的方法计算圆周率π,请写出计算步骤和简单的公式: (思考十秒钟,想不出来可以继续往下看,后面有答案) 001 什么是蒙特卡洛模拟 蒙特卡洛模拟,又称为统计实验方法 以概率论和统计 ...

  8. 参考文献怎么查找,去哪里查找?一篇文章讲明白这些问题

    在我们撰写论文查找参考文献时,往往不知道从哪里入手,本文小编就针对下面这三个方面给大家详细讲解下: 一.查找参考文献方法 二.参考文献资料查找网站 三.参考文献格式规范 一.查找参考文献方法: 1.知 ...

  9. 一篇文章讲明白领域驱动建模(DDD)

    何为DDD DDD不是架构设计方法,不能把每个设计细节具象化,DDD是一套体系,决定了其开放性,体系中可以用任何一种方法来解决这些问题,但是如果一些关键问题没有具体方案落地,可能让团队无所适从. 有的 ...

最新文章

  1. Integer判断相等,到底该用==还是equals
  2. ICCV 2021 | 重铸Regression荣光!具有残差对数似然估计的人体姿态回归
  3. boost::graph模块实现广度优先搜索算法的使用示例
  4. BugkuCTF-MISC题普通的二维码
  5. MSCI发布最新ESG评级 三七互娱位居A股游戏行业最高
  6. 【Python3 爬虫】14_爬取淘宝上的手机图片
  7. 失败后的从容离开,无意之中也许会再次点亮希望之光
  8. CentOS6.7系统优化加强牢固脚本
  9. java多线程调度_Java多线程:生命周期,实现与调度
  10. RiceQuant开源项目Rqalpha运行演示策略的错误“ERROR 'figure' is an unknown keyword argument”...
  11. mui架构app-终章(我是怎样决定放弃mui)
  12. html创建站点文件夹,构建及访问Web站点
  13. POJ 1581 A Contesting Decision
  14. python 读写csv文件(创建、追加、覆盖)_python文件操作
  15. Deep Representation Learning for Trajectory Similarity Computation
  16. 7-3 计算平均成绩 (15分)
  17. oracle驱动下载地址
  18. app界面设计是什么?需要学习什么UI软件
  19. 让模态浮出水面的S2 刘易斯逻辑之八
  20. 能发送消息,但是浏览器上不了网?360安全卫士功能推荐

热门文章

  1. 一起玩转开源数据库!OceanBase DevCon 之开源生态全景解析
  2. java学习-网络编程
  3. 【插件】大漠后台绑定 - 剑灵2 、天堂W
  4. 快速调整视频画面色调的剪辑工具
  5. fas怎么翻译成lisp_fas文件格式研究 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...
  6. python编程语言排行曲线绘制_最新编程语言排名(TIOBE)-数据抓取及绘图(使用Python)...
  7. RISC-V MCU应用之智能手环
  8. 马克思的两面性-来自网友
  9. 基层医疗云LIS系统源码,SaaS服务,无需部署,检验界面优雅,功能齐全
  10. 写一篇 冲压件 PFMEA 的实际案例分析