您的位置:首页 > 其它

理解#define write(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))

2015-03-30 16:57 218 查看
理解

#define write(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))

嵌入式系统编程,要求程序员能够利用C语言访问固定的内存地址。

既然是个地址,那么按照C语言的语法规则,这个表示地址的量应该是指针类型。

所以,知道要访问的内存地址后,比如0x57000040(这儿的addr就是内存地址0x57000040)

第一步是要把它强制转换为指针类型

(unsigned int*)(0x57000040);

所以0x57000040强制转换为指向unsigned int类型。

volatile(可变的)这个关键字说明这变量可能会被意想不到地改变,这样编译器就不会去假设这个变量的值了。

简单的说使用volatile的目的就是:
让对volatile 变量的存取不能缓存到寄存器,每次使用时需要重新存取。

第二步,对指针变量解引用,就能操作指针所指向的地址的内容了

*(volatile unsigned int*)(0x57000040)

小心地把#define宏中的参数用括号括起来,这是一个很好的习惯。

所以,write(b,addr) 的作用就是把值b写入addr所指的内存地址单元。

版权声明:本文为博主原创文章,未经博主允许不得转载。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: