(*(volatile unsigned char *)0x20)用法

 

在嵌入式的C程序中,我们经常看到类似如下的定义:

#define AAA (*(volatile unsigned char *)0x20)

#define BBB (*(volatile unsigned char *)0x4B000020)

......

那么如何对这条语句进行理解呢?

首先,我们来分析define语句后面的内容: (*(volatile unsigned char *)0x20),首先看到里面使用了关键字volatile和数据类型unsigned char以及C语言中的地址引用符号“*”,将这段代码拆开来看, (unsigned char *)0x20中0x20是一个地址,其存储数据的类型为unsigned char型,即一个8位的二进制数据,如一个8位的寄存器。利用关键字volatile对其进行修饰(volatile unsigned char *)0x20则表示这个地址中存放的数据容易被外部所软件/硬件改变,告诉编译器不要去优化该条语句,每次执行时均从该地址中去读取这个值。再在(volatile unsigned char *)0x20的前面加上地址引用符号"*"则表示一个指针对应的变量,则这条语句就成为了一个可操作的指针所指向的地址内容,相当于*p,只不过这儿p的地址固定为了0x20,*p所指向的数据类型定义为了unsigned char,最后将define后面的内容用括号括起来,这是一个良好的编程习惯!最终就形成了我们所看到的 (*(volatile unsigned char *)0x20)形式。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值