#define GPFCON *((volatile unsigned long *)0x56000050)具体含义

( unsigned long *)0x56000050
0x56000050只是个值,前面加(unsigned long *)表示 0x56000050是个地址,而且这个地址类型是unsigned long

volatile,关键字volatile 确保本条指令不会因C 编译器的优化而被省略,且要求每次直接读值。
volatile的意思是告诉编译器,在编程源代码时,对这个变量不要使用优化。在一般的程序设计中,如:int *a; int b;b = (*a) * (*a);这种情况。通常编译器为了减少存储器的读写时间,会把代码优化为:int a; int b; int c;c = a;b = c * c;因为外部存储器的读写速度肯定赶不上内存的读写速度,这样可以省一次外部存储器的读取时间,从而提高速度。如果把int a改为volatile int a编译器就不会自动把它优化掉了。在整个运算过程中,对变量a的值读取了再次。防止因变量a的值在这一期间发生了改变,而导致程序结果的错误。

那么 ( volatile unsigned long *)0x56000050是一个固定的指针,是不可变的,不是变量。而 long *u则是个指针变量。

再在前面加"":( volatile unsigned long *)0x56000050则变成了变量(普通的unsigned long变量,不是指针变量)。

(*(volatile unsigned long *)0x56000050)可看作是一个普通变量,这个变量有固定的地址,指向0x56000050。而0x56000050只是个常量,不是指针更不是变量。

参考:http://blog.sina.com.cn/s/blog_bdd495680102wmtu.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值