(C)理解 #define write(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))
Posted 逆水东流
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(C)理解 #define write(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))相关的知识,希望对你有一定的参考价值。
1. 理解
嵌入式系统编程,要求程序员能够利用C语言访问固定的内存地址。
既然是个地址,那么按照C语言的语法规则,这个表示地址的量应该是指针类型。
所以,知道要访问的内存地址后,比如0x57000040(这儿的addr就是内存地址0x57000040)
第一步是要把它强制转换为指针类型
(unsigned int*)(0x57000040);
所以0x57000040强制转换为指向unsigned int类型。
volatile(可变的)这个关键字说明这变量可能会被意想不到地改变,这样编译器就不会去假设这个变量的值了。
简单的说使用volatile的目的就是: 让对volatile 变量的存取不能缓存到寄存器,每次使用时需要重新存取。
第二步,对指针变量解引用,就能操作指针所指向的地址的内容了
*(volatile unsigned int*)(0x57000040)
小心地把#define宏中的参数用括号括起来,这是一个很好的习惯。
所以,write(b,addr) 的作用就是把值b写入addr所指的内存地址单元。
以上是关于(C)理解 #define write(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))的主要内容,如果未能解决你的问题,请参考以下文章