任何人都可以解釋下面的宏是什麼?任何人都可以幫助我這個宏嗎?
#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