最近在学习ARM嵌入式开发,其中有很多涉及到(*(volatile unsigned long *))的申明语法,于是百度了一下,终于理解其含义。遂发文记录,以免日后又忘记了。
我们分析一下下面的例子
#define GPBCON (*(volatile unsigned long *)0x56000010)
1.unsigned long是一个无符号的长整形
2.volatile是防止编译器对代码进行优化的关键字,所以volatile unsigned long就是不进行优化的无符号的长整形
3.volatile unsigned long *是申明一个不进行优化的无符号的长整形的指针
4.(volatile unsigned long *)0x56000010的意思是,将指针地址0x56000010强转换为(volatile unsigned long *)型指针
5.*(volatile unsigned long *)0x56000010的意思是,(volatile unsigned long *)0x56000010前加一个解引符*,从而取出0x56000010地址里的值
6.#define GPBCON (*(volatile unsigned long *)0x56000010),定义了GPBCON 是地址0x56000010里的值。这样我们给GPBCON赋值就是向内存地址0x56000010里赋值,从GPBCON取值就是拿内存地址0x56000010里的值。