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访问。
相关问答
51 单片机 中的 data 和 xdata 总共容量是,多少?不能确定,不同牌子及不同型号的单片机,其带的ram和扩展内存都各不相同,依实际情况而定一般的,data都有128字节芯片内置ram至少128字节至多也只256字节,具...
:errorC249:' DATA ':SEGMENTTOOLARGE“的错误,已经将 单片机 ...[最佳回答]如果你定义的数组不用更改就用ucharcodeXX[10]=根据你数据的用处,你可以有以下几种选择:data:直接寻址的片内RAM区低128B(00H~7FH)bdata:片内RA...
单片机data 是什么?一种单片机的数据类型,在直接寻址片内数据存贮区,访问速度快。还有位寻址区(bdata)、间接寻址区(idata)、代码存贮区(code)等等。。。一种单片机的数据类型,...
1、 单片机 读写外部RAM数据用()指令A、MOVB、MOVDC、MOVXD、M...[最佳回答]CMOV指令表示单片机内部的寄存器或者存储器之间相互传递数据(内部RAM);而MOVX则表示单片机内部的A累加器与片外的数据存储器传送数据.(这个是扩展...
单片机 code是什么意思?您好,这样的:code:程序存储区。data:固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。idata:固定指前面0x00-0xff的25......
关于 单片机 code和 data 关键字?就是一个指向int的指针,只不过不可以修改指针指向的这个值,但允许再拿这个指针指向其他的int类型的变量就是一个指向int的指针,只不过不可以修改指针指向的...
在Keil中编译后下方显示ProgramSize: data =11.0 xdata =0code=282其中这些数字代表什么意思?“data=11.0xdata=0code=282”代表生成的各个段的大小。具体来说,data=11.0代表你这段程序生成的目标代码所占用单片机的内部RAM空间是11.0个字节;xdata....
51 单片机DATA 什么意思?一种单片机的数据类型,在直接寻址片内数据存贮区,访问速度快。还有位寻址区(bdata)、间接寻址区(idata)、代码存贮区(code)、外部存储区(xdata)一种单片机的...
C语言与 单片机 C语言的区别急求?单片机c语言比起普通C语言增加了一些基本的指令,变量的赋值是16进制,当然单片机c语言只牵涉到普通c语言的基础部分。具体体现在:1、单片机中C的语法一般...
单片机 汇编伪指令 data 和equ的区别?1、EQU指令用于将一个数值或寄存器名赋给一个指定的符号名。格式:符号名EQU表达式符号名EQU寄存器名表达式必须是一个简单再定位表达式。用...2、D...