原创 关于C51中的XBYTE数组

2009-12-10 10:02 4764 12 12 分类: 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[]来对外部寄存器空间进行读写了,呵呵



PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
12
关闭 站长推荐上一条 /3 下一条