原创 关于C51中的XBYTE数组

2009-12-10 10:02 4014 6 6 分类: MCU/ 嵌入式
#define XBYTE ((unsigned char volatile xdata *) 0)

网络上的某些解释:XBYTE被定义成(unsigned char volatile xdata *) 0,0为一个基于寄存器的指针(可理解为:只不过这个指针用一个二进制常量标识,且其指向的内存单元在定义时就已经固定为该二进制常量且不可更改.),其存储类型为2指向xdata,偏移量为0,这样XBYTE成为指向xdata零地址的指针,通过XBYTE[0]可以读写该地址处的数据;同样通过 XBYTE[8000]也可以访问xdata空间绝对地址为8000处的数据。



我的理解:

换言之,如果我定义#define XBYTE ((unsigned char volatile xdata *) 0XFE00),那么就是说我的XBYTE数组的首地址是从FE00地址开始的了?
再换言之,所谓的XBYTE[8000],指的是已经定义了一个指针(这个指针没有名字,因为事实上是没有定义的,星号后面是空着的,呵呵),该指针指向的是unsigned char类型的数据,同时是volatile的(这个变量的含义网上资料很多,在此不再赘述),并且是指向xdata区。
而后的0(或者是上面所做例子的0XFE00)是说该指针指向了地址为0(或者0XFE00)的区域。
然后再括号括起来, ((unsigned char volatile xdata *) 0XFE00)[8000],指的是以刚刚那个指针指向的地址为数组首地址,长度为8000的数组。

这样,终于就弄明白了,为什么可以用XBYTE[]来对外部寄存器空间进行读写了,呵呵



文章评论0条评论)

登录后参与讨论
相关推荐阅读
zxzxy1988 2010-03-03 18:23
广告贴
发个广告哈,呵呵http://bbs.cnttr.cn/?fromuid=469963主要是需要流量来下一本书...汗终于发了一个原创帖了...
zxzxy1988 2010-02-06 11:09
关于C51求数组字节数量的详解(sizeof的详解)
看了网络上一些关于sizeof的用法,觉得都没有针对C51内的详细说明,在此进行详细解释,以便供大家参考:例如数组: unsigned char code parameter_table[] = { ...
zxzxy1988 2010-01-04 11:12
全地址译码、部分地址译码和线性选择译码
5.5.2 存储器芯片与CPU的连接  存储器芯片的外部引脚按功能分为数据线(DB)、地址线(AB)和控制线(CB)。CPU对存储器的读写操作首先是向其地址线发地址信号,然后向控制线发读写控制信号,最...
zxzxy1988 2009-12-31 16:44
浅谈C中的malloc和free(转)
转自http://blog.21ic.com/user1/5473/archives/2009/54832.html一、malloc()和free()的基本概念以及基本用法:1、函数原型及说明:voi...
zxzxy1988 2009-12-31 16:32
PIC单片机中asm volatile的问题
读师兄们写的操作系统,有这么句话asm volatile ("push _CurrentTaskPCL");查了资料(http://www.microchip.com.tw/modules/newbb...
zxzxy1988 2009-12-23 22:27
SRAM和DRAM
SRAM 是静态随机存储器DRAM是动态随机存储器DRAM,动态随机存取存储器,需要不断的刷新,才能保存数据。 而且是行列地址复用的,许多都有页模式。 SRAM,静态的随机存取存储器,加电情况下,不需...
我要评论
0
6
1
2
3
4
5
6
7
8
9
0
关闭 热点推荐上一条 /4 下一条