转载自:http://www.cnblogs.com/zhangpengshou/p/3597646.html
#define GPJ2CON (*(volatile unsigned long *) xE0200280)
开始对于上面的语法不太理解,但通过拆分,我们可以看的更明白:
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 中存储的值,我们既可以对其赋值,又可以从其中取值