2010-04-16 112 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.

相關問題