2011-09-19 19 views
1

我正試圖學習C來在德州儀器MSP430上編寫這個小程序。你能幫我理解((unsigned char *) 0x0023)的一部分嗎?關於define指令參數的簡單代碼混淆

我在理解這個Define指令的中間部分有問題。我試過了,但是在((unsigned char *) 0x0023)部分找不到任何東西。這看起來像一個類型轉換,但它不會投射任何東西。

我主要關心的是0x0023(十進制35)。這只是一個35位無符號字符指針?

代碼:

#define P1IFG_ptr ((unsigned char *) 0x0023) unsigned char result; 

任何幫助真的讚賞和感謝你提前。

回答

3
((unsigned char *) 0x0023) 

是一個指向地址0×23

我覺得有你的代碼示例中缺少換行符...

在MSP430這是端口P1中斷標誌寄存器:

每個PxIFGx位是其相應I/O引腳 的中斷標誌位,當所選輸入信號沿出現在針。全部 PxIFGx中斷標誌在其相應的 PxIE位和GIE位置1時請求中斷。每個PxIFG標誌必須用 軟件重置。軟件還可以設置每個PxIFG標誌,提供一種方式來產生一個軟件啓動的中斷,即 。位= 0:無中斷 待處理位= 1:中斷處於待處理狀態只有轉換,而非靜態的 級別會導致中斷。如果任何PxIFGx標誌在Px 中斷服務程序期間置位,或者在執行Px中斷服務程序的RETI指令後置位,則置1 PxIFGx標誌位 會產生另一箇中斷。這確保每個轉換都被確認爲 。

您可以從該寄存器,例如:

unsigned char result; 
result = *P1IFG_ptr; 

讀取或寫入它,例如:

*P1IFG_ptr = 1; 
+0

蓋伊Sirton:你是絕對正確的! #define P1IFG_ptr =((易失性無符號字符*)0x0023); unsigned char result; 感謝您的非常全面的答覆! – Celljak