任何人都可以解释下面的宏是什么?任何人都可以帮助我这个宏吗?
#define write_XDATA(address,value) (((char *)0x010000) [address]=value)
thx!
任何人都可以解释下面的宏是什么?任何人都可以帮助我这个宏吗?
#define write_XDATA(address,value) (((char *)0x010000) [address]=value)
thx!
您可以使用它:
write_XDATA(Address, Value);
并被展开:
((char*)0x010000)[Address]=Value;
这等同于以下内容:
char* baseAddress = (char*)0x010000;
*(baseAddress + Address) = Value;
所以基本上将存储在Value
字节地址为0x010000 + Address
。
它将value
分配给内存位置0x10000 + address
的字节。它很容易,如果你分离出来有点神交:
char* buf = (char *)0x010000;
buf[address]=value;
(尽管当然,你别无选择,只能一起捣碎所有宏)
它映射到使用真实地址地址偏移量然后写入它。 XDATA可能是从8051处理器中接管的一个术语。
我不知道你要多少细节听到, 但宏本身扩展到你刚才写的东西 -
宏观参数的地址和值放入地址和值占位符(((char *)0x010000)[address] = value)
这个宏在address + 0x010000
上保存一个字节的值。
这很可能是设计在嵌入式平台上运行的程序的一部分。它被用来做内存映射IO。
寄存器映射的基地址是0x010000。它将value
写入内存位置0x010000+address
。
使用的方括号[]
工作,因为阵列的寻址和指针运算的在C.
不一定是等价的。为什么不能写一个接受'char'和'size_t'的函数,并在地址0x010000 + size_t处写入'char'? – sharptooth 2010-04-16 12:31:08
对不起,我最后的声明是不明确的。我的意思是,“......在宏观上,你别无选择......”。 – 2010-04-16 12:42:27