从其它嵌入式的C带来的习惯,一直使用*(unsigned char volatile xdata *)(0x2000)=0xFF这类的方式来进行对外部绝对地址的字节访问。 刚才查了一下ABSACC.h,XBYTE的定义是这样的, #define XBYTE ((unsigned char volatile xdata *) 0), 其实XBYTE就相当于一个指向外部数据区的无符号字符型变量的指针(的名称,且当前的指针指向外部RAM的0地址),而在C里面指针一般和数组是可以混用的。这样也就相当于存在 一个定义在外部数据存储器的数组XBYTE[65536],直接使用下标就可访问其中的每个单元。
//下面是猜想,欢迎大家验证 这里的XBYTE是定义在0地址的,如果将其定义在其它地址则可以禁止通过XBYTE对低端存储区的访问,如 #define XBYTE ((unsigned char volatile xdata *) 0x2000), 则XBYTE[9]访问的应是0X2009这一外部RAM的单元,而不是外部RAM的0x0009单元的内容,因为数组访问不能使用负数下标,所以通过这种方式就无法访问到小于0x2000的外部RAM单元的内容了。 |