RAM,ROM,FLASH
一:keil编译成功时显示的data、xdata、code
程序编译成功时会在信息框内显示data、xdata、code各被占了多少字节,keil工具可以设置变量默认放在哪个存储区,默认是data
data就是片内RAM低128字节的区域,idata就是包括低128字节的总256字节的区域,xdata:如果片内有拓展的xdata就指片内拓展的部分,如现在使用的单片机型号,如果没有拓展,一般是片外RAM,code是ROM程序存储器
写代码时,可以在变量前面加关键字指定存放区域,先默认放data里,不够用了再放idata里,再不够用就放xdata里,即优先级:data > idata > xdata
速度:data > idata > xdata
二:Memory Model。
Small:variables in DATA。Compact:variables in PDATA。Large:variables inXDATA。
RAM是用来在程序运行中存放随机变量的数据空间,51单片机默认的内部RAM只有128字节,52单片机增加至256字节,STC89C52增加到512字节,STC89C54、55、58、516等增加到1280字节,对于编程者来说,一个芯片的RAM越多,写起程序来就越容易得心应手,不会总考虑RAM不够用而担心这担心那,连过多的变量都不敢定义。
如果定义一个变量后,不对这个变量进行初始化,这个变量默认的初值就是0,其实这个结论是需要一定的条件的,在用KEIL编写程序时,总程序中所有变量占用的字节之和小于128字节,并且存储器模式为small模式的前提下,对定义的变量不进行初始化时,编译器会默认将变量值设定为0。一旦程序中的总变量超过128字节,必须对所有变量进行初始化,否则,没有被初始化的变量默认值将是不确定的。当变量总和超过128字节时,必须还要在编译器中重新设定存储器的存储模式。
存储器模式一共有3种,分别为small、compact和large模式,在KEIL编译器中有选项可进行选择,选项表如下图所示。它决定了没有明确指定存储类型的变量、函数参数等数据的默认存储区域。如果在某些函数中需要使用非默认的存储模式,也可以使用关健字直接说明。
下面对这三种模式分别做介绍。
1. small模式
small模式中,所有缺省变量参数均装入单片机内部128字节RAM中,当定义类似如:uchar a; float b;等变量时,这些变量都装入内部128字节RAM中。使用该模式的优点是访问速度快,缺点是空间有限,而且是对堆栈的空间分配比较少,难以把握,碰到需要递归调用的时候需要小心。所以这种模式只适用于小程序。
2. compact模式
compact模式中,所有缺省变量均位于单片机内部256字节RAM中,和在small模式中使用关健字pdata来定义变量的效果相同,如:uchar pdata a[100];在该种模式下,程序总变量不得超过256字节,对于只有128字节的单片机,使用此模式定义变量超过128字节时,程序将出错。优点是空间较small模式宽裕,速度较small慢,但较large要快,是一种中间状态。
3. large模式
在large模式中,所有缺省变量可放在多达64KB的RAM区,包括内部RAM和外部RAM,和使用关健字xdata来定义变量的效果相同。这种模式的优点是空间大,可存变量多,缺点是访问速度慢,尤其对于2个以上的多字节变量访问速度来说更是如此。
方便起见,STC单片机要访问扩展RAM时,可直接用以下方法:首先在编译器中设置存储器模式为large模式,如下图所示:
其次,为安全起见,当程序中定义多于128字节的其它变量时,最好申明为xdata型,如uchar xdata table[100];意思为定义一个100个字节容量的数组,将其在扩展RAM中分配存储空间。另外一定要注意,在large模式下,编写程序时,定义的变量总数千万不要超过对应单片机的内部最大RAM字节数,因为即使超过了,编译器也不会提示错误,但是程序必定会出错。
三:ROM(EEPROM,按字节存储)、RAM、DRAM(内存条)、SRAM(CPU缓存)(stc15w204s使用,256ByteSRAM。stm32使用 10K Byte)、FLASH(ROM一种,按扇区存储)。
RAM价格相比ROM和FLASH要高。
RAM分为两大类:SRAM和DRAM
SRAM为静态RAM(Static RAM/SRAM),SRAM速度非常快,是目前读写最快的存储设备,但是它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU的一级缓冲,二级缓冲。
DRAM为动态RAM(Dynamic RAM/DRAM),DRAM保留数据的时间很短,速度也比SRAM慢,不过它还是比任何的ROM都要快,但从价格上来说DRAM相比SRAM要便宜很多,计算机内存就是DRAM的。
RAM的容量是最小比ROM和FLASH容量相对较小,RAM的特点是可读可写,给存储器断电后,里面存储的数据会丢失。我们经常说的内存,比如计算机的内存,手机的内存,包括CPU里用的高速缓存,都属于RAM这类存储器。
ROM和FLASH容量比RAM的容量相对较大。一般定制一个ROM修改系统版本信息都在这里面。(system)为系统所在目录,相当于PC系统的Windows文件夹,(boot.img)是一个镜像文件,就是所谓的内核核心,一般移植ROM的时候会用到。
ROM和FLASH掉电不会丢失数据。
但相对于ROM和FLASH的掉电不丢失数据相比,RAM掉电会造成数据丢失。
四:flash和rom。
1)、ROM 程序存储器
ROM全称位Read Only Memory,译为只读存储器。顾名思义,它是一种只能读出事先所存的数据的固态半导体存储器。ROM中所存数据稳定,一旦存储数据就再也无法将之改变或者删除,断电后所存数据也不会消失。其结构简单,因而常用于存储各种固化程序和数据。
在单片机用来存储程序数据、变量和常量。
为了便于使用和大批量生产,进一步发展出了可编程只读存储器(PROM)、可擦除可编程只读存储器(EPROM)。EPROM需要用紫外线长时间照射才能擦除,使用很不方便。1980s又出现了电可擦除可编程只读存储器(EEPROM),它克服了EPROM的不足,但是集成度不高、价格较贵。于是又发展出了一种新型的存储单元结构同EPROM类似的快闪存储器(FLASH MEMORY)。FLASH集成度高、功耗低、体积小,又能在线快速擦除,因而获得了快速发展。
2)、Falsh存储器
Flash 存储器(Flash EEPROM)又称闪存,快闪。它是EEPROM的一种。它结合了ROM和RAM的长处。不仅具备电子可擦除可编辑(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据。它于EEPROM的最大区别是,FLASH按扇区(block)操作,而EEPROM按照字节操作。FLASH的电路结构较简单,同样容量占芯片面积较小,成本自然比EEPROM低,因此适合用于做程序存储器。
3)、EMMC Flash(Orange Pi 3LTS),NAND Flash(全志F1C200S板):
通俗来说:eMMC=NAND闪存+闪存控制芯片+标准接口封装。
正点原子I.MX6ULL和STM32MP157都买了EMMC Flash版本。
五、常用的存储器简单分类
1、数据易失性存储器,如DRAM(Dynamic RAM,动态RAM)、SRAM(Static RAM,静态RAM)。这类存储器读写速度较快,但是掉电后数据会丢失。在SoC设计中通常被用作数据缓存、程序缓存;
2、数据非易失性存储器,如NAND/NOR flash。这类存储器读写速度比较慢,但是在掉电后数据不会丢失。因此,在SoC设计中可用作大数据的存储或者程序的存储;
3、NVRAM( Non-Volatile Random Access Memory) 是非易失性随机访问存储器,指断电后仍能保持数据的一种RAM。NVRAM可以随机访问。因此有些解释中,说Flash是属于NVRAM,是不准确的。因为从严格意义上来说,Flash分有两种:nand flash和nor flash。其中的nor属于是可以随机访问的,而nand flash不是真正的随机访问,属于顺序访问(serial access)。
3、新出现的存储器PSRAM(pseudo SRAM)(ESP32使用),称之为伪静态随机存取器。它具有SRAM的接口协议:给出地址、读写指令,就可以实现数据的存取;相比DRAM的实现,它不需要复杂的memory controller来控制内存单元去定期刷新数据,但是它的内核架构却是DRAM架构;传统的SRAM是由6个晶体管构成一个存储cell,而psram则是由1个晶体管+一个电容构成一个存储cell,因此psram可以实现较大的存储容量;
基于上述分析,新出现的存储器psram相比传统存储器具有如下优点:
更大的带宽:串行psram通过八路串行接口对外互联,最高在200MHz Double-Data-Rate速率下,可实现超3Gbps的带宽传输;
更高的容量:目前可实现存储容量有:32M、64M、256M,这比市面上其他串行接口随机存储器的容量要大很多;
更低的成本:串行psram采用DRAM架构,可以有效压缩芯片体积,故串行psram生产成本接近DRAM成本;
更小的尺寸:串行psram的低引脚数封装与传统的RAM存储相比,具有尺寸更小、成本更低等优势;
更广的应用:psram采用的是自行刷新(Self-Refresh),不需要刷新电路即能保存它内部存储的数据;而DRAM每隔一段时间,要刷新充电一次,否则内部的数据即会消失,因此psram相比传统RAM会有更广的应用;
PSRAM作为常用的一种外设存储设备,所具有的优点使其广泛被应用。
参考文档:
1:RAM、ROM、emmc、iNand、SD卡、mmc 与 Nandflash 的区别_想文艺一点的程序员的博客-CSDN博客_emmc和flash的区别
RAM,ROM,FLASH相关推荐
- RAM ROM FLASH的区别
文章目录 一.ROM 程序存储器 二.Falsh存储器 三.RAM随机访问存储器 四.三者之间的区别 作为一个初学单片机的初学者,常常把ROM RAM FLASH这几个都单词搞得晕头转向的.由此记下此 ...
- 单片机中的ROM,RAM和FLASH的作用
本文部分参考自:http://blog.sina.com.cn/s/blog_98ca54fc01017y4t.html 并在此基础上进行整理,添加了关于flash的问题. 之前从较为抽象的角度介绍了 ...
- 对RAM,ROM,NOR/NAND FLASH等常见内存设备类型的理解
对RAM,ROM,NOR/NAND FLASH等常见内存设备类型的理解 RAM DRAM SDRAM DDR SDRAM SRAM ROM EEPROM FLASH NOR FLASH NAND FL ...
- ROM、RAM和FLASH的区别是什么?SRAM、DRAM、PROM、EPROM、EEPROM
ROM.RAM和FLASH的区别是什么? SRAM.DRAM.PROM.EPROM.EEPROM 一.性能对比 1.ROM和RAM指的都是半导体存储器,ROM在系统停止供电的时候仍然可以保持数据,而R ...
- RAM,ROM,EPROM,EEPROM,FLASH ROM的区别
RAM,ROM,EPROM,EEPROM,FLASH ROM的区别 1.RAM指的是"随机存取存储器",即Random Access Memory.它可以随时读写,而且速度很快,缺 ...
- ROM, FLASH和RAM的区别
ROM (Read Only Memory)程序存储器 ROM全称Read Only Memory,顾名思义,它是一种只能读出事先所存的数据的固态半导体存储器.ROM中所存数据稳定,一旦存储数据就再也 ...
- 有关计算机存储器的几个名词的概念和辨析(内存,外存,RAM,ROM,磁盘等)
自己总结: 1.内存不一定都是RAM,ROM也可以是内存的一部分. (ROM是只读存储器(Read-Only Memory),也是计算机内部存储器中的一种,而硬盘是外部存储器) 内部存储器 内部存储器 ...
- 计算机术语列是,计算机术语-RAM ROM
计算机术语 abp: address bit permuting,地址位序列改变 atc(access time from clock,时钟存取时间) bsram(burst pipelined sy ...
- 程序如何在RAM ROM运行,内存分配与分区
关于RAM ROM RAM与ROM就是具体的存储空间,统称为存储器 RAM(random access memory):运行内存,CPU可以直接访问,读写速度非常快,但是不能掉电存储.它又分为: 动态 ...
最新文章
- 使用 CAS 在 Tomcat 中实现单点登录
- Spring boot(五)模板引擎 Thymeleaf
- mfc笔记--摘录关于裁剪窗口区域的设置,WS_CLIPCHILDREN和WS_CLIPSIBLINGS的理解
- ajax-loader.gif不存在怎么解决_女生恋爱技巧:恋人吵架怎么办?
- 统计学习方法第二十一章作业:PageRank迭代算法、幂法、代数算法 代码实现
- 干翻Java_Java第三次作业第一题
- linux 磁盘uuid获取
- 技术选型和知识点介绍(上)
- 写一个自己的javascript库
- Windows XP无线零配置服务
- Cosine Similarity(余弦相似度)
- 八层高速PCB板叠层设计
- Kafka系列 —— 生产实践分享
- Matplotlib设置坐标轴日期格式
- 进程间通讯(IPC)(有信号捕捉函数)
- 微信小程序获取右上角胶囊距顶部的距离和胶囊的尺寸
- JavaScript实现模板生成大量数据的方法(附代码)
- Deep Learning on Graphs: A Survey论文笔记
- 定积分的应用之 柱壳法求旋转体体积
- 华为p10 android几,华为p10国行版和海外版有什么区别 配置参数对比评测