2014-02-10 60 views

回答

3

它首先將其轉換爲「指向易失性UINT32」的指針後取消a

還有比需要更多的方式括號,這將是更好的寫法如下:

*(volatile UINT32 *) a 

,做同樣的事情。你會希望有能在這裏更多的代碼,當然,無論是寫:

*(volatile UINT32 *) a = 4711; 

是(由於volatile)的寫不寫了優化,以4711中所含a地址,確保即使從編譯器的角度來看,這似乎毫無意義。

或讀:

const UINT32 packetCounter = *(volatile UINT32 *) a; 

讀取的地址在a的電流值,並將其存儲在一個名爲packetCounter局部常量變量。這是如果a是某個I/O寄存器的地址,它將看起來如何。再次由於volatile,讀取必須發生,即使對編譯器來說似乎毫無意義,它也不能被優化或緩存。這在I/O寄存器中很常見。

+1

不應該是「指向'UINT32'的易失性指針」嗎? –

+1

@PhilippMatthiasSchäfer不,那會是'UINT32 * volatile',這是非常罕見的。例如,請參見[本頁](http://www.barrgroup.com/Embedded-Systems/How-To/C-Volatile-Keyword)。 – unwind

+0

@unwind ..謝謝你的好回答! – Fagun