技术文档

单片机XDATA C51关键字data,idata,xdata区别及如何使用

小编 2024-11-24 技术文档 23 0

C51关键字data、idata、xdata区别及如何使用

刚入门单片机的小伙伴估计很少接触到这三个关键字,但是随着学习的深入,特别是当你真正接触到使用51单片机开发的项目时,这几个关键字应该都不会陌生。

data、idata、xdata三者的主要区别有两点:

一、

位置不一样

它们定义的变量存放在单片机片上RAM(包括内部RAM和外部RAM,但都集成在单片机芯片内,固称“片上RAM”)中,但存放的地址不一样:

data定义的变量放在单片机前128字节(0x00~0x7F)地址空间中;

idata定义的变量放在(0x00~0xFF)地址空间中;

xdata定义的变量则是放在单片机片上外部扩展RAM空间中(一般指外部0x0000~0xFFFF空间,具体空间大小因单片机而异,有的单片机没有外部RAM)。

二、速度不一样

data定义的变量速度最快,idata次之,xdata较前两者慢。

细心的小伙伴可能已经发现,data和idata定义的变量都是在单片机内部RAM空间(0x00~0xFF地址空间),并且两者定义的地址空间在前128字节完全重叠。事实确实如此,它俩空间虽然重叠,但是访问方式不一样,这正是导致data速度比idata快的原因。

下面来说说怎么用,很简单,在定义变量的时候在变量(全局变量或者局部变量均可)前加上即可 ,例如:

unsigned char data mydata;

idata unsigned char myidata;

unsigned char xdata myxdata;

有小伙伴又要问了,那我怎么知道一个变量什么时候该加关键字,该加哪个关键字呢?判断的依据是:如果一个变量用的很频繁(程序访问它的次数的多或者频繁),你可以将该变量加data或者idata ,将其放到内部RAM中,提高访问速度;如果该变量很少被访问,则可以加xdata定义 ,将其放到外部RAM中,把有限的内部RAM留给真正需要“速度”的变量。如果你无法判断,就别加了,交给编译器处理吧。举两个栗子吧:

假如你的项目中有USB/串口/网络通信,且通信数据量较大而且较为频繁,那在通信发送/接收程序中的变量则可适当加上data或者idata;

我做过一个热敏行式打印机项目,其中需要频繁从字库芯片中加载数据到热敏打印头中,程序中我便给相关变量加上idata修饰。

其实还有两个关键字——bdata和pdata,我很少在实际项目中见到,很多书籍也不建议使用,固不多说。

支持原创,转载时请注明出处,疯狂码者愿与你一起努力,共同成长,谢谢!

51单片机中的data , idata, xdata, pdata 的区别

51单片机中的data , idata, xdata, pdata 的区别

从数据存储类型来说,8051系列有片内,片外程序存储器,片内,片外数据存储器。

片内程序存储器还分直接寻址和间接寻址类型,分别对应code , data ,xdata, idata以及

根据51系列特点而设定的pdata类型,使用不铜的存储器,将使程序执行效率不同,在编写C51程序时,

最好指定变量的存储类型,这样将有利于提高程序执行效率。

data:固定指前面0x00 - 0x7f的128个RAM,可以用acc直接读写,速度最快,生成代码也最小。

idata:固定指前面0x00 - 0xff 的256个RAM,其中前128和data的128完全相同,指示因为访问方式的不同,

idata是用类似C中的指针方式访问的。汇编语句为 mov acc,@rx c中idata做指针式访问效果很好。

xdata: 外部扩展RAM 一般指外部0x0000 - 0xffff 空间,用dptr访问。

相关问答

C51中的 data , xdata ,code各指什么意思啊。附图一张,最后生成...

图片中data是指存储在内部RAM中的数据,xdata是指存储在外部RAM中的数据,code是存储在ROM中的数据。“单片机flash为32k”一般是说这个单片机的ROM空间是32000个...

busy=P3^3;voidad0809(ucharidata*x){uchari;ucharxdata*a...

[回答]ucharidataad[10]表示定义一个unsignedchar型的长度为10的数组,数组分配在idata也就是间接寻址访问的片内ram中不用改就行ucharidataad[10]表....

单片机 中如何定义表格?

数组前不加“code”或“data”,则默认将数组存放在程序存储器中;code指定数据是存储在代码区,数据是在编程的时候跟代码一起写入代码存储器,运行过程中不能...

单片机 c编程:***WARNINGL2:REFERENCEMADETOUNRESOLVEDEXTERN...

[最佳回答]你的voidmian()写错了,应该是voidmain()改正后就没错了,

单片机 命令MOV、MOVX、MOVC有什么区别?

汇编语言指令,MOV用于对单片机内部数据存储器寻址,MOVC用于对单片机内部程序存储器区进行寻址,MOVX用于对外部数据存储器区进行寻址,各种单片机的说明书中指...

单片机 数据写入过程?

单片机(Microcontroller)是一种集成电路,内部含有处理器核心、内存、可编程输入/输出外设等。所以,单片机可以执行数据处理、逻辑运算、输入/输出控制等功能...

单片机 RX和TX和数据口有什么区别?

在单片机中,RX、TX和数据口都是用于串行通信的接口,但它们之间有些许不同:RX(Receive)和TX(Transmit)是UART串行通信接口的引脚。TX是单片机输出数据的引...

单片机 里的数据存在什么地方?

这个有多个可能的。比如有的应用中,会把数据存在FLASH里,因为这个很大。有的是EEPROM,因为这个寿命长。有的是RAM,因为这个速度快。总之,看需求。这个有多个...

stc89c52rc 单片机 ,编译后: data :19; xdata :0;code:2099。提示超过size了,怎么办?

是不是用的非破解的keil?非破解的只能用到2k是不是用的非破解的keil?非破解的只能用到2k

单片机 汇编伪指令 data 和equ的区别?

2、DATA指令用于将一个内部RAM的地址赋给指定的符号名。格式:符号名DATA表达式数值表达式的值在0-255之间,表达式必须是一个简单再定位表达...

猜你喜欢