在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;
赋值语句要是这么些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
|
|||
Home > LX51 Introduction > Memory Classes > NXP 51MX Devices |
The NXP 51MX architecture provides a universal memory map that includes all memory classes in a single, contiguous 16MB address space.
The BIT, DATA, and IDATA memory classes comprise the on-chip memory of the 51MX architecture. They are contained in the EDATA memory class.
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.