【嵌入式】——对#define GPBCON (*(volatile unsigned long*)0x56000010)的理解
#define GPBCON (*(volatile unsigned long*)0x56000010)
1:volatile
当计算机需要一个数值的时候,会先把内存中的值读取到寄存器,然后下次在使用该值的时候就直接读取寄存器中的值了。加上volatile之后,程序就会在每次需要该值的时候都读取一次内存。这是为了防止某些原因硬件会改变其值。
2:
(volatile unsigned long *)即为强制类型转换;(volatile unsigned long *)0x56000010 的意思就是把0x56000010强制转换为unsigned long类型的指针。这时(volatile unsigned long *)0x56000010就可以看做是一个指针p了。*(volatile unsigned long*)0x56000010等价于*p,也就是取指针p的地址(取0x56000010的地址)。
此时整句话的句意也就不难理解了。
【嵌入式】——对#define GPBCON (*(volatile unsigned long*)0x56000010)的理解的更多相关文章
- #define GPFCON (* (volatile unsigned long * )0x56000050 )
int a; int *p; p = &a; *p = 0x100; //a=0x100 p = (int *)0x56000050; *p =0x100; *( ( int * ) 0x56 ...
- 嵌入式开发(*(volatile unsigned long *)) 认识
一个.说明 (*(volatile unsigned long *)) 这个语句对于不同的计算机体系结构,设备可能是port映射,也可能是内存映射的. 假设系统结构支持独立的IO地址空间.而且是por ...
- C语言之强制类型转换与指针--#define DIR *((volatile unsigned int *) 0x0022)
强制类型转换形式:(类型说明符) (表达式) 举例说明:1) int a; a = (int)1.9; 2)char *b; int *p; p = (int *) b; //将b的值强制转换为指向整 ...
- 嵌入式中的 *(volatile unsigned int *)0x500 解释
C语言中*(volatile unsigned int *)0x500的解释: 如下: (unsigned int *)0x500:将地址0x500强制转化为int型指针*(unsigned int ...
- (*(volatile unsigned long *)详解
(*(volatile unsigned long *) 对于不同的计算机体系结构,设备可能是端口映射,也可能是内存映射的.如果系统结构支持独立的IO地址空间,并且是端口映射,就必须使用汇编语言完成实 ...
- *(volatile unsigned long *) 语法
#define GPJ2CON (*(volatile unsigned long *) 0xE0200280) 开始对于上面的语法不太理解,但通过拆分,我们可以看的更明白: 1.(unsigned ...
- 指针之 *((volatile unsigned long *)(x))解析
今天重新温习了一下C语言的指针部分,突然想到了经常会碰见的一种宏定义:#define PGAS (*((volatile unsinged long *)(x))) 在解析该宏定义前,先看看指针变量的 ...
- (C)理解#define write(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))
理解 #define write(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b)) 嵌入式系统编程,要求程序员能够利用C语言访问固 ...
- gcc -02引起内存溢出'unsigned i'应修订为'volatile unsigned i'
2017-12-13 10:44:19gcc -02引起内存溢出'unsigned i'应修订为'volatile unsigned i' 1.3.100 driver/char/random.cst ...
随机推荐
- Mac下 如何配置虚拟机软件Parallel Desktop--超详细
Mac下 如何配置虚拟机软件Pparallel Desktop--超详细 Mac 的双系统解决方案有两种,一种是使用Boot Camp分区安装独立的Windows,一种是通过安装Parallels D ...
- 华中科技大学 ubuntu14.04源
deb http://mirrors.hust.edu.cn/ubuntu/ trusty main restricteddeb-src http://mirrors.hust.edu.cn/ubun ...
- ITOO高校云平台V3.1--项目总结(二)
自身责任要明白 心态要明白 布置任务要有反馈 总结 今天下午.举办了一场ITOO高校云平台3.1总结大会,针对3.1开发的过程中统计上来的问题进行讨论. 通过讨论统计上来的问题,映射到自身,看看自己还 ...
- pyenv管理多python版本
手动安装 cd ~ git clone git://github.com/yyuu/pyenv.git .pyenv echo 'export PYENV_ROOT="$HOME/.pyen ...
- zabbix server 与数据库不在同一台服务器上面
16312:20170527:095215.225 database is down: reconnecting in 10 seconds 16312:20170527:095225.225 [Z3 ...
- docker容器资源配额控制
转自:http://blog.csdn.net/horsefoot/article/details/51731543 文/ 天云软件 容器技术团队 Docker通过cgroup来控制容器使用的资源配额 ...
- python2/3 中删除字典中value为空的键值对方法
python2 data_info = { 'account': 1, 'remark': 2, 'sort': '', 'weight': '', } for key in data_info.ke ...
- Lua语法基础(1)---简介、基本数据类型、表达式
我觉得我已经陷入了一个坑内.因为,安装了Lua和SublimeText3编辑器之后,怎么使自己编写的lua代码在untiy内运行起来,是个我完全不了解的机制.先放一放吧.首先,来回顾一下Lua的语法基 ...
- Git详解之Git分支
Git 分支 几乎每一种版本控制系统都以某种形式支持分支.使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作.在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录的 ...
- 腾讯云提示invalid pos, pos is bigger than filesize! pos: 0, file_size: 0错误
腾讯云提示invalid pos, pos is bigger than filesize! pos: 0, file_size: 0错误 起因 使用hdfs dfs -text xxx命令提示下面错 ...