你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
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;