4606|11

61

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

理解不了 一行代码 [复制链接]

哪位兄弟给解释一下

#define        GPBCON                (*(volatile unsigned long *)0x56000010)
怎么理解?

最新回复

谢谢兄弟们!  详情 回复 发表于 2009-7-27 11:28
点赞 关注

回复
举报

78

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
能不详细解释一下?
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
顶一下
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

4
 
看来楼主也是初学啊
看看C语言的复杂指针分析
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

5
 
volatile 每次从内存中读值
举例:
GPBCON = 0x10
将0x10放入内存地址0x56000010中,通常这都是一个寄存器,寄存器大小为sizeof(long)个字节。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

6
 
谢谢楼上的兄弟,我是不懂几个括号,* 号转换几次是啥意思
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

7
 
(volatile unsigned long *)表示后面这个数字是一个unsigned long型的指针,也就是地址。
volatile的作用表示此地址上存放的值是随时会被改变的。

最前面那个*就是对地址的取值了。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

8
 
谢谢 shuiyan

#define GPBCON (*(volatile unsigned long *)0x56000010)

这样定义后,GPBCON 应该不能赋值吧?可是我看到一段代码里 GPBCON 还能被赋值,如何理解?
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

9
 
再顶
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

10
 
定义后,GPXCON就对应了一个指针所指向的值。就好比:
int x;
int* p = &x;
x = 100;

GPXCON就是x了,所以是可以赋值的。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

11
 
把0x56000010这个地址强制转换成一个指针
这样这个常量就可以当做变量来用了,而且是地址由你来分配的变量,所以在单片机和嵌入式中这玩意儿很管用
#define GPBCON (*(volatile unsigned long *)0x56000010)
内层的括弧是强制转换的,外层的括弧是宏定义必须的,因为宏定义只是简单的替换,所以要尽量加括弧。
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

12
 
谢谢兄弟们!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表