当前位置: 代码迷 >> 综合 >> 单片机上FLASH、EEPROM、RAM、ROM区别以及定义关键词所在区域
  详细解决方案

单片机上FLASH、EEPROM、RAM、ROM区别以及定义关键词所在区域

热度:6   发布时间:2023-12-15 07:13:54.0

一、

flash:闪存 就是可以 重复擦写的程序存储器;在运行过程中不能改,使用的时候我们是把所编写的程序烧录到flash中去。

RAM:主要做运行时数据存储器,内存是片内的512Byte(some else)左右,掉电丢失,如你定义一个变量int a =xxxx;它就是放在内存中的,数据就是你要处理的内容,内存就是用来放临时产生的数据的。

EEPROM:EEPROM是用来保存掉电后用户不希望丢的数据,运行过程中可以改变,可以理解为数据存储器。可擦除可编程只读存储器,Flash的操作特性完全符合EEPROM的定义,属EEPROM无疑

 

FLASH按扇区操作,EEPROM则按字节操作

 

ROM-Read Only Memory只读存储器。断电后信息不丢失,如计算机启动用的BIOS芯片。存取速度很低,(较RAM而言)且不能改写。由于不能改写信息,不能升级,现已很少使用。(flash代替了)

 

注:1.常定义一些变量,都是放到RAM里的

       2.初始化数据比如液晶要显示的内容界面,都是放到FLASH区里的(也就是以前说的ROM区)

       3.在过去的20年里,嵌入式系统一直使用ROM(EPROM)作为它们的存储设备,然而近年来Flash全面代替了ROM(EPROM)在嵌入式系统中的地位,用作存储Bootloader以及操作系统或者程序代码,或者直接当硬盘使用(U盘)

     之所以代替原因:Flash存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还可以快速读取数据(NVRAM的优势),使数据不会因为断电而丢失。U盘和MP3里用的就是这种存储器。

二、

51单片机的片内RAM和片外RAM的区别

data:片内 RAM 从 0x00~0x7F

idata:片内 RAM 从 0x00~0xFF

pdata:片外 RAM 从 0x00~0xFF

xdata:片外 RAM 从 0x0000~0xFFFF

data 表示的是内部RAM的低128字节,可以直接寻址,速度比较快
idata 表示内部RAM高128字节,只能是间接寻址,速度比data里的数据要慢

 

因为在 Keil 默认设置下,data 是可以省略的,即什么都不加的时候变量就是定义到 data 区域中的。data 区域 RAM 的访问在汇编语言中用的是直接寻址,执行速度是最快的。如果你定义成 idata,不仅仅可以访问 data 区域,还可以访问 0x80H~0xFF 的范围,但加了 idata 关键字后,访问的时候 51 单片机用的是通用寄存器间接寻址,速度较 data会慢一些,而且我们平时大多数情况下不太希望访问到 0x80H~0xFF,因为这块通常用于中断与函数调用的堆栈,所以在绝大多数情况下,我们使用内部 RAM 的时候,只用 data 就可以了。


对于外部 RAM 来说,使用 pdata 定义的变量存到了外部 RAM 的 0x00~0xFF 的地址范围内,这块地址的访问和 idata 类似,都是用通用寄存器间接寻址,而如果你定义成 xdata,可以访问的范围更广泛,从 0 到 64K 的地址都可以访问到,但是它需要使用 2 个字节寄存器DPTRH 和 DPTRL 来进行间接寻址,速度是最慢的。
 

我们的 STC89C52 共有 512 字节的 RAM,分为 256 字节的片内 RAM 和 256 字节的片外RAM。一般情况下,我们是使用 data 区域,data 不够用了,我们就用 xdata,如果希望程序执行效率尽量高一点,就使用 pdata 关键字来定义。

参考出处:https://blog.csdn.net/RedValkyrie/article/details/106163844

https://blog.csdn.net/Mike__Lin/article/details/107129712?utm_medium=distribute.pc_relevant_download.none-task-blog-baidujs-2.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-baidujs-2.nonecase

  相关解决方案