|
#include
...
#define ADD0000 ((char*)(0x020000))
uint data check_RAM_i;
void main()
{
...
check_RAM_i=0x7000;
while(1)
{
...
}
}
void uart_int(void) interrupt 4
{
if (RI == 1)
{
buffer=SBUF;
ADD0000[check_RAM_i]=buffer;
buffer1=ADD0000[check_RAM_i];
check_RAM_i++;
i++;
}
}
这是简写的一部分代码,我想问一下大侠们。
其中#define ADD0000 ((char*)(0x020000))
这行代码,我使用的是KEIL编译器。
020000,这个地址应该代表XDATA的0000地址处。因为在KEIL编译器中,
指针可以由三个字节组成。第一字节02,则代表是XDATA。
那么我想知道的是:这个宏定义不是已经将ADD0000,定义为一个指向具体地址的指针了吗?
为什么后面还可以这样引用?ADD0000[check_RAM_i]
check_RAM_i是个变量。当check_RAM_i=0x7000;时。
ADD0000[check_RAM_i]=buffer;应该就是将buffer内容放到了外部总线
也就是XDATA的7000地址处了吧。
所以现在不明白的就是为什么可以这样引用?ADD0000[check_RAM_i]
宏定义的时候,没有存在变量啊。
|
|