0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机的RAM和FLASH认识理解

汽车玩家 来源:HACK实验室 作者:HACK实验室 2020-05-03 18:17 次阅读

最近在一个问答社区回答了一个问题,关于单片机存储器的,于是有了想专门写一篇关于单片机存储器的想法。作为单片机内部一个重要组成部分,存储器占有很重要的地位,今天就来聊聊我对于单片机的内部存储器RAM和FLASH的一些认识和理解。

1、先聊聊存储器

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

单片机的RAM和FLASH认识理解

存储器分类

2、单片机的存储器

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

单片机的RAM和FLASH认识理解

STM32F103RB内存大小

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

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

单片机的RAM和FLASH认识理解

STM32F103内存映射图

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

如果你玩过单片机,那你应该对Keil这款软件不会感到陌生,下图是我的那款OLED时钟的软件用Keil编译后的编译信息

单片机的RAM和FLASH认识理解

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文件的最下面找到,如下图:

单片机的RAM和FLASH认识理解

.map文件信息

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

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

单片机的RAM和FLASH认识理解

STM32的Flash存储结构

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

单片机的RAM和FLASH认识理解

STM32的SRAM存储结构

5、总结

至此我相信大家应该对stm32单片机的内部存储有了更进一步的认识。其实如果想更深入的了解单片机的运行轨迹,我建议大家来详细研究一下stm32单片机的上电内存读取过程,如果搞明白了这块收获会是非常大的。后面有机会我也会对这块进行深入的总结,并整理成文章发出来,与大家一起分享。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6002

    文章

    43980

    浏览量

    620888
  • FlaSh
    +关注

    关注

    10

    文章

    1551

    浏览量

    146689
  • RAM
    RAM
    +关注

    关注

    7

    文章

    1322

    浏览量

    113708
收藏 人收藏

    评论

    相关推荐

    8-Bit 触控式 Flash 单片机中文资料

    而又有效的实现方法。 触摸按键功能完全集成于单片机内,使用较少的外部元件便可实现触摸按键的 应用。该系列单片机除了 Flash 程序存储器,还包括 RAM 数据存储器和用于存 储串列数
    发表于 02-28 10:01 0次下载

    单片机RAM不够用怎么解决?

    来自一位用户的咨询,麻烦帮忙解答。越详细越好,有图有真相。如有相关的视频、文档也可以辅助说明,谢谢。 单片机RAM不够用怎么办? 单片机都有RAM,如果我们一下子定义了一大堆的变量,使
    发表于 02-02 07:35

    单片机为何需要Flash和EEPROM?它们有何作用?

    单片机为何需要Flash和EEPROM?它们有何作用? 单片机是一种集成电路,具有处理器核心、内存和外设等功能,通常用于嵌入式系统中。Flash和EEPROM则是
    的头像 发表于 01-18 11:43 897次阅读

    请问单片机MCU如何实现让部分代码运行在RAM中?

    单片机MCU如何实现让部分代码运行在RAM中?
    发表于 11-02 07:01

    单片机MCU如何实现让部分代码运行在RAM中?

    单片机MCU如何实现让部分代码运行在RAM
    发表于 10-30 08:26

    单片机RAM少有哪几点原因?

    单片机RAM少有哪几点原因? 正文: 单片机是指把整个计算机系统集成在一个芯片之内,具有微型化、低功耗、低成本等特点的集成电路。单片机系统中RAM
    的头像 发表于 10-29 16:23 401次阅读

    ARM STM32中的程序是在RAM里还是在FLASH里运行?

    STM32有两个存储空间,一个是片上的FLASH,一个是片上的RAMRAM相当于内存,FLASH相当于硬盘。
    的头像 发表于 10-27 14:06 1931次阅读
    ARM STM32中的程序是在<b class='flag-5'>RAM</b>里还是在<b class='flag-5'>FLASH</b>里运行?

    讲讲STM32单片机Flash的读保护和写保护

    讲讲STM32单片机Flash的读保护和写保护
    的头像 发表于 10-26 15:52 4483次阅读
    讲讲STM32<b class='flag-5'>单片机</b><b class='flag-5'>Flash</b>的读保护和写保护

    单片机常有Flash,而不常有EEPROM原因

    单片机常有Flash,而不常有EEPROM原因
    的头像 发表于 10-24 15:38 375次阅读
    <b class='flag-5'>单片机</b>常有<b class='flag-5'>Flash</b>,而不常有EEPROM原因

    如果单片机不带硬件操作nand flash的话,用软件可以实现nand flash操作吗?

    如果单片机不带硬件操作nand flash的话,用软件可以实现nand flash操作吗?不要求速度,只要读写文件就可以了,请问怎么用单片机io模拟操作芯片
    发表于 10-23 06:30

    巧言单片机RAM及ROM

    巧言单片机RAM及ROM
    的头像 发表于 10-17 15:45 497次阅读

    单片机的二极boot一般会占用多少资源?

    单片机的二极boot,一般会占用多少资源,如flash ram
    发表于 10-08 07:33

    单片机中的RAM vs ROM

    单片机中的RAM vs ROM
    的头像 发表于 09-28 17:57 698次阅读

    51单片机使用如果不xdata编译器超过内部ram会自动放到外部ram中吗 ?

    51单片机使用如果不xdata编译器超过内部ram会自动放到外部ram中吗
    发表于 09-25 06:38

    请教一下大神在8051单片机片内RAM该如何分区呢?

    请教一下大神在8051单片机片内RAM该如何分区呢?
    发表于 05-09 16:05