概述
一: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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复