苏柚 发表于 2016-3-30 08:47:01

【3.30签到】每日问答——关键字volatile有什么含意?

29日问题答案
问:关键字const有什么含意?
答:1)表示常量不可以修改的变量。
      2)可以修饰参数,作为输入参数.      3)修饰函数,防止以外的改动.      4)修饰类的成员函数,不改变类中的数据成员.
------------------------------------------------------------------------------------------------------------今日问题问:关键字volatile有什么含意?
-------------------------------------------------------------------------------------------------------------社区活动火热进行中,速速参与:
1、拼实力、看创意,超低功耗STM32L0方案秀(超低价团购开发板)
2、报名“STM32中国峰会”,144引脚、32引脚STM32开发板统统有!
3、【限时活动】抢楼啦,开发板拿回家

荣丰宇 发表于 2016-3-30 08:56:54

一般说来,volatile用在如下的几个地方:

1、中断服务程序中修改的供其它程序检测的变量需要加volatile;

2、多任务环境下各任务间共享的标志应该加volatile;

3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;

另外,以上这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半被打断了重写),在1中可以通过关中断来实
现,2中可以禁止任务调度,3中则只能依靠硬件的良好设计了。

creep 发表于 2016-3-30 08:48:36

:)                        

farky 发表于 2016-3-30 08:50:01

定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了

阿莫西林 发表于 2016-3-30 08:50:07

:):lol:loveliness:

ersha4877 发表于 2016-3-30 08:51:35

:):):):):):):):)

chifen 发表于 2016-3-30 08:52:28

签到            

骆驼-350031 发表于 2016-3-30 08:53:32

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=5a=6这两句。

同理 如果是读取IO电平,系统每次都会读取IO输入寄存器。不会为了效率而进行优化

QianFan 发表于 2016-3-30 08:54:54

:lol:lol:lol:lol

andrewz 发表于 2016-3-30 08:57:38

签到签到~~~
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 【3.30签到】每日问答——关键字volatile有什么含意?