8051单片机基础4:数据存储类型(data,idata,xdata,code)

参考来源: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间接寻址
codeFlash(最大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设计、开发平台、软件工具等知识分享。

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

  • 17
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值