#define GPJ2CON (*(volatile unsigned long *) 0xE0200280)
開始對於上面的語法不太理解,但通過拆分,我們可以看的更明白:
1、(unsigned long *)變量,代表“變量”是一個unsigned long類型的指針;例如:(unsigned long *)i ,語句中 i 即為 (unsigned long *)的一個指針;
2、volatile是一個修飾符,告訴編譯器此段代碼不要優化;因此,(volatile unsigned long *)變量,意思是未優化指針類型的變量;例如:(volatile unsigned long *)i ,語句中 i 即為 (volatile unsigned long *)的一個指針;
3、(volatile unsigned long *) 0xE0200280,此處把變量換成了固定地址,意思是(volatile unsigned long *)指針指向固定的地址 0xE0200280
4、前面再加一個*,即 (volatile unsigned long *) 0xE0200280 代表 GPJ2CON 是一個變量,我們既可以給固定地址中賦值,也可以從固定地址中取值。例如:(volatile unsigned long *)i ,語句中 i 即為 (volatile unsigned long *)的一個指針,而 *i 即代表 i 中存儲的值,我們既可以對其賦值,又可以從其中取值;
