任何人都可以帮助我这个宏吗?

时间:2010-04-16 12:22:41

标签: c macros

任何人都可以解释详细信息以下宏的作用?

#define write_XDATA(address,value) (((char *)0x010000) [address]=value)

THX!

6 个答案:

答案 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上的宏保存了一个字节的值。