2010-04-16 109 views

回答

5

您可以使用它:

write_XDATA(Address, Value); 

并被展开:

((char*)0x010000)[Address]=Value; 

这等同于以下内容:

char* baseAddress = (char*)0x010000; 
*(baseAddress + Address) = Value; 

所以基本上将存储在Value字节地址为0x010000 + Address

2

它将value分配给内存位置0x10000 + address的字节。它很容易,如果你分离出来有点神交:

char* buf = (char *)0x010000; 
buf[address]=value; 

(尽管当然,你别无选择,只能一起捣碎所有宏)

+0

不一定是等价的。为什么不能写一个接受'char'和'size_t'的函数,并在地址0x010000 + size_t处写入'char'? – sharptooth 2010-04-16 12:31:08

+0

对不起,我最后的声明是不明确的。我的意思是,“......在宏观上,你别无选择......”。 – 2010-04-16 12:42:27

0

它映射到使用真实地址地址偏移量然后写入它。 XDATA可能是从8051处理器中接管的一个术语。

0

我不知道你要多少细节听到, 但宏本身扩展到你刚才写的东西 -

宏观参数的地址和值放入地址占位符(((char *)0x010000)[address] = value)

0

这个宏在address + 0x010000上保存一个字节的值。

1

这很可能是设计在嵌入式平台上运行的程序的一部分。它被用来做内存映射IO。

寄存器映射的基地址是0x010000。它将value写入内存位置0x010000+address

使用的方括号[]工作,因为阵列的寻址和指针运算的在C.

相关问题