你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
【3.30签到】每日问答——关键字volatile有什么含意?
[复制链接]
苏柚
提问时间:2016-3-30 08:47 /
赞
0
收藏
0
评论
96
分享
发布时间:2016-3-30 08:47
请先
登录
后回复
96个回答
creep
回答时间:2016-3-30 08:48:36
a0a.1 32b0c
赞
0
评论
回复
支持
反对
荣丰宇
回答时间:2016-3-30 08:56:54
a0a.1 32b0c
一般说来,volatile用在如下的几个地方:
1、中断服务程序中修改的供其它程序检测的变量需要加volatile;
2、多任务环境下各任务间共享的标志应该加volatile;
3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;
另外,以上这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半被打断了重写),在1中可以通过关中断来实
现,2中可以禁止任务调度,3中则只能依靠硬件的良好设计了。
赞
1
评论
回复
支持
1
反对
0
巧子儿
回答时间:2016-3-30 11:48:06
a0a.1 32b0c
一般说来,volatile用在如下的几个地方:
1、中断服务程序中修改的供其它程序检测的变量需要加volatile;
2、多任务环境下各任务间共享的标志应该加volatile;
3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;
另外,以上这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半被打断了重写),在1中可以通过关中断来实
现,2中可以禁止任务调度,3中则只能依靠硬件的良好设计了。
赞
0
评论
回复
支持
反对
stary666
回答时间:2016-3-30 09:33:41
a0a.1 32b0c
一般说来,volatile用在如下的几个地方:
1、中断服务程序中修改的供其它程序检测的变量需要加volatile;
2、多任务环境下各任务间共享的标志应该加volatile;
3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;
另外,以上这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半被打断了重写),在1中可以通过关中断来实
现,2中可以禁止任务调度,3中则只能依靠硬件的良好设计了。
赞
0
评论
回复
支持
反对
dearfar
回答时间:2016-3-30 08:50:01
a0a.1 32b0c
定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了
赞
0
评论
回复
支持
反对
阿莫西林
回答时间:2016-3-30 08:50:07
a1024a.1 32b0c
赞
0
评论
回复
支持
反对
ersha4877
回答时间:2016-3-30 08:51:35
a1024a.1 32b0c
赞
0
评论
回复
支持
反对
chifen
回答时间:2016-3-30 08:52:28
a0a.1 32b0c
签到
赞
0
评论
回复
支持
反对
骆驼-350031
回答时间:2016-3-30 08:53:32
a0a.1 32b0c
volatile 是直接寄存器读取值的意思,防止在编译过程中编译器对其进行自动优化。
比如
int a;
a = 5;
a=6;
a=7;
这三行语句执行完a的值为7. 但是编译器可能会自动省略a=5 a=6这两句。
如果是 volatile int a;
a = 5;
a=6;
a=7;
这三行语句执行完a的值为7. 但是编译器不会会自动省a=5 a=6这两句。
同理 如果是读取IO电平,系统每次都会读取IO输入寄存器。不会为了效率而进行优化
赞
0
评论
回复
支持
反对
qianfan
回答时间:2016-3-30 08:54:54
a1024a.1 32b0c
赞
0
评论
回复
支持
反对
andrewz
回答时间:2016-3-30 08:57:38
a1024a.1 32b0c
签到签到~~~
赞
0
评论
回复
支持
反对
yubinwu_3004964
回答时间:2016-3-30 08:57:54
a0a.1 32b0c
签到签到
volatile有变化的意思,加了防止编译器优化。特别是有关硬件方面的
赞
0
评论
回复
支持
反对
freeelectron
回答时间:2016-3-30 08:58:45
a0a.1 32b0c
加上之后,可以防止编译器优化,尤其是在嵌入式编程方面
赞
0
评论
回复
支持
反对
hjf2002
回答时间:2016-3-30 08:59:30
a1024a.1 32b0c
签到签到
赞
0
评论
回复
支持
反对
ptiinngg
回答时间:2016-3-30 09:00:21
a1024a.1 32b0c
赞
0
评论
回复
支持
反对
潇潇雨歇pku
回答时间:2016-3-30 09:00:28
a0a.1 32b0c
签到,学习
赞
0
评论
回复
支持
反对
orima
回答时间:2016-3-30 09:00:49
a0a.1 32b0c
1、中断服务程序中修改的供其它程序检测的变量需要加volatile;
2、多任务环境下各任务间共享的标志应该加volatile;
赞
0
评论
回复
支持
反对
1
2
3
4
5
6
7
/ 7 页
下一页
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
1、中断服务程序中修改的供其它程序检测的变量需要加volatile;
2、多任务环境下各任务间共享的标志应该加volatile;
3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;
另外,以上这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半被打断了重写),在1中可以通过关中断来实
现,2中可以禁止任务调度,3中则只能依靠硬件的良好设计了。
一般说来,volatile用在如下的几个地方:
1、中断服务程序中修改的供其它程序检测的变量需要加volatile;
2、多任务环境下各任务间共享的标志应该加volatile;
3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;
另外,以上这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半被打断了重写),在1中可以通过关中断来实
现,2中可以禁止任务调度,3中则只能依靠硬件的良好设计了。
一般说来,volatile用在如下的几个地方:
1、中断服务程序中修改的供其它程序检测的变量需要加volatile;
2、多任务环境下各任务间共享的标志应该加volatile;
3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;
另外,以上这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半被打断了重写),在1中可以通过关中断来实
现,2中可以禁止任务调度,3中则只能依靠硬件的良好设计了。
比如
int a;
a = 5;
a=6;
a=7;
这三行语句执行完a的值为7. 但是编译器可能会自动省略a=5 a=6这两句。
如果是 volatile int a;
a = 5;
a=6;
a=7;
这三行语句执行完a的值为7. 但是编译器不会会自动省a=5 a=6这两句。
同理 如果是读取IO电平,系统每次都会读取IO输入寄存器。不会为了效率而进行优化
volatile有变化的意思,加了防止编译器优化。特别是有关硬件方面的
2、多任务环境下各任务间共享的标志应该加volatile;