定义样例
#define IO0PIN (*((volatile unsigned long *) 0xE0028000))
(volatile unsigned long *) 0xE0028000
把0xE0028000这个地址强制转换为long型指针.即对指针的操作的范围是从0xE0028000开始的4个字节(long型).
volatile 限定编译器不对这个指针的指向的存储单元进行优化,即不用通用寄存器暂时代替这个指针的指向的存储单元,而是每次取值都直接到指针的指向的存储单元取值.
前面再用*运算附对指针取值,即寄存器的值。
volatile 主要用于变量会异步改变的情况下,主要有三个方面:
1.cpu外设寄存器
2.中断和主循环都会用到的全局变量
3.操作系统中的线程间都会用到的公共变量.