【C语言】[其他] :code, data, idata, xdata, bdata, edata, hdata等,代表的意思

从数据存储类型来说,8051系列有片内、片外程序存储器,片内、片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code、data、xdata、idata以及根据51系列特点而设 定的pdata类型,使用不同的存储器,将使程序执行效率不同,在编写C51程序时,最好指定变量的存储类型,这样将有利于提高程序执行效率(此问题将在后面专门讲述)。与ANSI-C稍有不同,它只分SAMLL、COMPACT、LARGE模式,各种不同的模式对应不同的实际硬件系统,也将有不同的编译结果。

 

在51系列中data,idata,xdata,pdata的区别:

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

idata:固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式访问的。汇编中的语句为:mox ACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好)

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

pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx读写。这个比较特殊,而且C51好象有对此BUG,建议少用。但也有他的优点,具体用法属于中级问题,这里不提。

 

 

 

单片机C语言unsigned char code table[]  code 是什么作用?

 

    code的作用是告诉单片机,我定义的数据要放在ROM(程序存储区)里面,写入后就不能再更改,其实是相当与汇编里面的寻址MOVX(好像是),因为C语言中没办法详细描述存入的是ROM还是RAM(寄存器),所以在软件中添加了这一个语句起到代替汇编指令的作用,对应的还有data是存入RAM的意思。

程序可以简单的分为code(程序)区,和data (数据)区,code区在运行的时候是不可以更改的,data区放全局变量和临时变量,是要不断的改变的,cpu从code区读取指令,对data区的数据进行运算处理,因此code区存储在什么介质上并不重要,象以前的计算机程序存储在卡片上,code区也可以放在rom里面,也可以放在ram里面,也可以放在flash里面(但是运行速度要慢很多,主要读flash比读ram要费时间),因此一般的做法是要将程序放到flash里面,然后load到 ram里面运行的;DATA区就没有什么选择了,肯定要放在RAM里面,放到rom里面改动不了。

 

bdata如何使用它呢?
若程序需要8个或者更多的bit变量,如果你想一次性给8个变量赋值的话就不方便了,(举个例子说说它的方便之处,想更深入的了解请在应用中自己琢磨)又不可以定义bit数组,只有一个方法

 

 

char bdata MODE;
sbit MODE_7 = MODE^7;
sbit MODE_6 = MODE^6;
sbit MODE_5 =  MODE^5;
sbit MODE_4 = MODE^4;
sbit MODE_3 = MODE^3;
sbit MODE_2 = MODE^2;
sbit MODE_1 = MODE^1;
sbit MODE_0 = MODE^0;
8个bit变量MODE_n 就定义好了
这是定义语句,Keilc 的特殊数据类型。记住一定要是sbit
不能 bit MODE_0 = MODE^0;

赋值语句要是这么些C语言就视为异或运算


转载于:http://blog.sina.com.cn/s/blog_4daf4df90100i5ej.html

如有转载请说明,转载出为上方链接即可(非本页链接)。

reposted by pillar peng - 2015.2.26 - 13:30  

--------------------------------------------分割线----------------------------------------------------------------------------------

modified by pillar peng -2015.2.28 - 10:57 

这里有更加详细的说明,不过是英文版,但是有图解而且单词也不难,一般的应该都可以看懂。

这里贴出原来的链接:

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.kui0030a/lx51_in_51mx.htm

NXP 51MX Devices

The NXP 51MX architecture provides a universal memory map that includes all memory classes in a single, contiguous 16MB address space.

BIT, DATA, IDATA, and EDATA

The BITDATA, and IDATA memory classes comprise the on-chip memory of the 51MX architecture. They are contained in the EDATA memory class.

【C语言】[其他] :code, data, idata, xdata, bdata, edata, hdata等,代表的意思_第1张图片

CODE, ECODE, EDATA, XDATA, and HDATA

【C语言】[其他] :code, data, idata, xdata, bdata, edata, hdata等,代表的意思_第2张图片The NXP 51MX address space is comprised of 8 MBytes of program memory (theECODE memory class) and 8 MBytes of data memory (the HDATA memory class).

The ECODE memory class contains the CODE memory class (which is still limited to 64 KBytes) and up to 64 code banks that may be used for code banking applications.

The HDATA memory class includes XDATA (which is still limited to 64 KBytes), EDATA(which is limited to 64 KBytes), and up to 8 MBytes of far variables.

 

 

ARM KUI 0030A
Non-Confidential

你可能感兴趣的:(C语言,单片机)