volatile关键字;
在进行各类地址定义时,往往用到volatile关键字,volatile的意思是“不稳定的”。
有volatile修饰的变量,程序在每次访问时,都会直接访问该变量的内存空间,而不是对寄存器进行访问(如果变量没有进行volatile修饰,那么如果有多次访问,编译器会将其优化而将值存入寄存器,接下来的访问都会直接在寄存器里面操作,而不访问变量所在的内存);
我的理解是,变量名就相当于地址,只是地址前加了“*”而已,如果要给寄存器添加变量,那么可以使用
为表示方便定义一个32位无符号数据类型:typedef u32 unsigned long
(u32*)0x7F008820;这一步表示0x7F008820所指数据为32位整型;
*((u32*)0x7F008820);这样就可以直接取得地址所指的值了;
最后一步定义:
#define GPMCON *((u32*)0x7F008820)
我们就可以在C语言里面通过 u32 i=GPMCOM 来访问它了。也可以通过GPMCOM=i来赋值;
这里没有使用volatile,因为GPMCON的值,是只会通过程序改变的,不会因为外界原因而发生改变;不像CPSR一样。