任何人都可以解释详细信息以下宏的作用?
#define write_XDATA(address,value) (((char *)0x010000) [address]=value)
THX!
答案 0 :(得分:5)
你使用它:
write_XDATA( Address, Value );
并且它已扩展:
((char*)0x010000)[Address]=Value;
等同于以下内容:
char* baseAddress = (char*)0x010000;
*(baseAddress + Address) = Value;
所以基本上它会将Value
中存储的字节写入地址0x010000 + Address
。
答案 1 :(得分:2)
它将value
分配给内存位置0x10000 + address
的字节。如果你把它分开一点就更容易理解:
char* buf = (char *)0x010000;
buf[address]=value;
(当然,你别无选择,只能将它们拼凑在一起。)
答案 2 :(得分:1)
这很可能是旨在在嵌入式平台上运行的程序的一部分。它用于执行内存映射IO。
寄存器映射的基址是0x010000。它将value
写入内存位置0x010000+address
。
使用方括号[]
是有效的,因为C中的数组寻址和指针算法是等效的。
答案 3 :(得分:0)
使用偏移量将地址映射到实际地址,然后写入。 XDATA可能是从8051处理器接管的术语。
答案 4 :(得分:0)
我不知道你想听多少细节, 但宏扩展到你刚刚写的东西 -
宏参数地址和值被放入宏扩展定义中的地址和值占位符(((char *)0x010000)[address] = value)
答案 5 :(得分:0)
此address + 0x010000
上的宏保存了一个字节的值。