理解#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所指的内存地址单元。
版权声明:本文为博主原创文章,未经博主允许不得转载。
#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所指的内存地址单元。
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关文章推荐
- (C)理解 #define write(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))
- (*(volatile unsigned int *))详解
- (*(volatile unsigned int *))详解
- (*(volatile unsigned int *))详解
- (volatile unsigned int *)的理解
- (*(volatile unsigned int *))
- 【补充】 嵌入式中的 *(volatile unsigned int *)理解
- 一个表达式 *(volatile unsigned short int *)(0x60020000)=val; 的解析
- (*(volatile unsigned int *))详解
- (*(volatile unsigned int *))详解
- malloc函数 编辑词条 B 添加义项 ? extern void *malloc(unsigned int num_bytes) 30 本词条 正文无图片, 无基本信息模块, 正文缺少必要目录
- 嵌入式中的 *(volatile unsigned int *)理解
- 解读 *(volatile unsigned int *)0x30008000 的含义
- 生成伪随机数的函数int rand(void)和void srand(unsigned seed);
- (*(volatile unsigned int *))详解
- STM32学习笔记之地址 (*(volatile unsigned int *)(x))分析
- (volatile unsigned int *)的理解
- (*(volatile unsigned int *))详解
- (*(volatile unsigned int *))详解
- (*(volatile unsigned int *))详解-数值常量如何转化为内存地址_转阿拉丁神丢新浪博