目录:
1、(*(volatile_unsigned_long*))解释
2、数据在内存中的存储形式
3、实例代码
1、(*(volatile_unsigned_long*))解释
#define abc (*(volatile unsigned long *)0xE0200280)
开始对于上面的语法不太理解,但通过拆分可以看的更明白:
1)(unsigned long *)变量,代表“变量”是1个unsigned long类型的指针;如:(unsigned long *)i,语句中 i 即为 (unsigned long *)的一个指针;
2)volatile是一个修饰符,告诉编译器此段代码不要优化;因此,(volatile unsigned long *)变量,意思是未优化指针类型的变量;例如:(volatile unsigned long *)i ,语句中 i 即为 (volatile unsigned long *)的一个指针;
当使用volatile限定时,表示这个变量是依赖系统实现的,意味着这个变量会被其他程序或者计算机硬件修改,由于地址依赖于硬件,volatile就表示它的值会依赖于硬件。
3)(volatile unsigned long *) 0xE0200280,此处把变量换成了固定地址,意思是(volatile unsigned long *)指针指向固定的地址0xE0200280;
4)前面再加一个*,即*(volatile unsigned long *) 0xE0200280 代表 abc是一个变量,我们既可以给固定地址中赋值,也可以从固定地址中取值。例如:(volatile unsigned long *)i ,语句中 i 即为 (volatile unsigned long *)的一个指针,而 *i 即代表 i 中存储的值,我们既可以对其赋值,又可以从其中取值(浮点数在内存里是按2进制存储的)。