文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>对(*(volatile unsigned char *)的理解

对(*(volatile unsigned char *)的理解

时间:2010-08-14  来源:山行

以前对形如#define MCF_UART0_USR (*(volatile unsigned char *) (0xFC060004))这样的定义感到很奇怪,也没有对这个问题进行深究,今天下午特地下从网上搜了相关资料,现整理如下:
首先, #define MCF_UART0_USR 是一个宏定义,这一点好理解,关键是如何理解(*(volatile unsigned char *) (0xFC060004)).
嵌入式系统编程,要求程序员能够利用C语言访问固定的内存地址。既然是个地址,那么按照C语言的语法规则,这个表示地址的量应该是指针类型。所以,知道要访问的内存地址后,比如0xFC060004,下面分几步进行讲解:
1) 强制转换为指针类型 (volatile unsigned char *) (0xFC060004)是把内存地址0xFC060004强制转换为指针类型, MCF52277UARTDE USR寄存器是八位寄存器,所以把0xFC060004强制转换为指向unsigned char类型,volatile(可变的)这个关键字说明这变量可能会被意想不到地改变,加上它编译器就不会去假设这个变量的值了。如此看来,(volatile unsigned char *) (0xFC060004)其实相当于定义了一个指向0xFC060004地址的指针,我们可以简化理解成unsigned char *p;  
2)在指针变量前再加*,就成了对指针变量解引用,就能操作指针所指向的地址的内容了, 这其实与其他普通定义的指针一样,如int *p;   *p=3;  其中int *p是定义了一个指针变量p,*p则存放了p所指向地址的内容。
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载