65

帖子

0

TA的资源

一粒金砂(初级)

21
 
volatile告诉编译器不要优化

回复

85

帖子

0

TA的资源

一粒金砂(初级)

22
 
引用楼主 xiaole921 的回复:
在bootloader里面的定义:将addr地址的值取出来给value,请问,前面加上volatile的用意何在,一般在什么情况下要加这个修饰符!谢谢!

#define HAL_READ_UINT32(addr, value)        ((value) = *((volatile UINT32 *)(addr)))


以前我和你有同样的看法

不知道我们是被哪本书误导了

郁闷
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

23
 
这个就可变的意思,如果某些寄存器经常要变化,就要用这个关键字,否则,CPU会直接操作缓存,
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

24
 
就是说如果你的变量操作时(多线程等),CPU会自作聪明的把它保存到寄存器里。当做缓存。这在编译
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

25
 
一直对这个比较模糊 ,学习了!@!
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

26
 
二楼的说的是 register,volatile 跟 register恰恰相反。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

27
 
我的理解:
比如系统从硬盘上读一块数据到内存,现在不经过操作系统直接从硬盘上再读同一块数据,这个时候读出来的数据块可能和刚才读出来放在内存中的数据块不一样了。加上volatile就像每次从硬盘上读取数据块的时候斗让操作系统把内存中的数据flush到硬盘上,然后再从硬盘上读。这里的硬盘就相当于寄存器,不过volatile就没有flush这个过程了。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

28
 
二楼正解,呵呵。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

29
 
引用 16 楼 j260749883 的回复:
这个比较基础哦


这种基础的东西才见本事噢。。。
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

30
 
应聘嵌入式开发必备知识。每次都会考。

编译器不会优化,我上次面试回答是强制刷新cache .........
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

31
 
引用 19 楼 beyondma 的回复:
二楼正解,一般是告诉编译器不要优化。


这是关键

因为嵌入式编译器经常进行优化处理,为了防止变量被优化掉,导致程序异常就要采用它
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

32
 
值得思考
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

33
 
volatile 是防止编译器优化。
使CPU直接从内存取数据而不经过cache,这样做降低了执行效率,但是可以得到最近的更新。
常用在对物理地址或者是控制器寄存器的访问。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

34
 
对,不做优化。
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

35
 
谁来回复一个,我好结贴
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

36
 
目的是不做优化,直接去实际地址取,2楼的正确
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

37
 
二楼的对,之前遇到过这个问题,没有加volatile,结果程序hang在那里      
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

38
 
2楼正解
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

39
 
2楼是对的,搞嵌入式一定要注意这些小地方!
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

40
 
学习啦
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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