参考来源:Keil > Help > uVision Help > Cx51 Compiler User’s Guide > Language Extensions > Memory Types

存储类型

Cx51编译器可以访问8051的所有存储区域,声明变量时可以指定分配的存储区,也可以基于内存模型配置进行隐式分配。

关键字 存储空间 地址范围 访问方式
data 内部RAM(低位128 bytes) 0x00~0x7F 直接寻址
idata 内部RAM(全部256 bytes) 0x00~0xFF 间接寻址
bdata 内部RAM(指定 16 bytes) 0x20~0x2F 位寻址/直接寻址
pdata 扩展RAM(低位256 bytes) 0x00~0xFF 间接寻址
xdata 扩展RAM(最大64K bytes) 0x0000~0xFFFF 间接寻址
code Flash(最大64K bytes) 0x0000~0xFFFF 间接寻址

实际项目中经常用到的是 xdata, code

使用方法

变量声明/定义时,添加关键字data,idata,bdata,pdata,xdata,code。

unsigned char data  var1;
unsigned char code  text[] = "ENTER PARAMETER:";
unsigned char xdata array[100];
unsigned char idata x,y,z;
unsigned char pdata dimension;
unsigned char xdata vector[10][4][4];
unsigned char bdata flags;

MCU访问内部RAM时,读写速度比扩展RAM速度快。

因此在编写应用代码时,把频繁使用的变量放在内部RAM,使用较少的变量放在外部RAM。

Flash中的变量,只能进行读操作,掉电保存。

RAM中的变量,可以读写操作,掉电不保存。

详细说明

8051存储器结构

在这里插入图片描述

data

data只能声明变量,不能声明函数。

读写data变量时,MCU使用8位地址直接寻址内部RAM(低位128字节)。

优点是读写速度最快,缺点是可用空间太小。

idata

idata只能声明变量,不能声明函数。

读写idata变量时,MCU使用8位地址间接寻址内部RAM(全部256字节)。

可访问空间为内部RAM的全部256字节,其中低位128字节和data空间重复,只是访问方式不同。

bdata

bdata只能声明变量,不能声明函数。

读写bdata变量时,MCU使用8位地址位寻址/直接寻址内部RAM(部分16字节)。

可访问空间为内部RAM的16字节,地址范围为0x20~0x2F,位于data空间内部。

pdata

pdata只能声明变量,不能声明函数。

读写pdata变量时,MCU使用8位地址间接寻址扩展RAM(低位256字节,一个页)。

xdata

xdata只能声明变量,不能声明函数。

读写xdata变量时,MCU使用16位地址间接寻址扩展RAM(全部地址,最大64K字节)。

code

code可以声明常量,也可以声明函数。

读code常量时,MCU使用16位地址间接寻址Flash空间(最大64K字节)。

声明函数时,编译器默认隐式添加code关键字,用户不用处理。


本文完~

关于作者

微信公众号:萤火虫的电子笔记

分享电子产品开发软、硬件方面知识,51单片机、STM32、ARM、AltiumDesigner PCB设计、开发平台、软件工具等知识分享。

欢迎转发,请注明出处及作者。关注微信公众号,获取最新文章动态。
在这里插入图片描述

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐