打印

20120903请举例 volatile 非用不可的几个情况

[复制链接]
2071|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
谈的元|  楼主 | 2012-9-3 08:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
infion_123| | 2012-9-3 09:04 | 只看该作者
顶一个。。。

使用特权

评论回复
板凳
yewuyi| | 2012-9-3 09:47 | 只看该作者
没有这样的例子。

使用特权

评论回复
地板
AppBaby| | 2012-9-3 11:25 | 只看该作者
属于共享变量,而编译器不知道的.

比如,IO输入状态寄存器. 如果不加声明,在编译器看来,它只属于一个普通的RAM; 而实际上这个RAM是与外部事件共享的(外部电压改变).

使用特权

评论回复
5
谈的元|  楼主 | 2012-9-3 19:22 | 只看该作者
本帖最后由 谈的元 于 2012-9-3 19:25 编辑

请继续,


等例子说明,


不然怎么能应用自如,


不然怎么能看出代码问题?

使用特权

评论回复
6
谈的元|  楼主 | 2012-9-4 23:08 | 只看该作者
再顶一下

使用特权

评论回复
7
HWM| | 2012-9-4 23:19 | 只看该作者
volatile 是针对“代码优化”的,即告诉编译系统“此变量可能自变,注意其优化处理”。

如果完全不考虑优化,则不用volatile也无妨。

使用特权

评论回复
8
谈的元|  楼主 | 2012-9-5 22:09 | 只看该作者
在特定的应用中必须要用volatile,现在就等大家举应用的事例了

使用特权

评论回复
9
ahgao| | 2012-9-5 22:34 | 只看该作者
会在中断中被修改的全局变量,裸奔时最常见。
多线程共享的全局变量。

使用特权

评论回复
10
asthathat321| | 2012-9-6 00:11 | 只看该作者
很好的東西 非常不錯

使用特权

评论回复
11
optical85| | 2012-9-6 10:18 | 只看该作者
本帖最后由 optical85 于 2012-9-6 10:21 编辑

比如程序将某寄存器可以用作发送数据寄存器(比如UART、I2C的数据发送寄存器TXBUF)。分两次由两个变量a和b分别赋值给这个寄存器TXBUF:{TXBUF = a;TXBUF = b;},每次把数据发送给外部(比如PC或者I2C器件),并且该状态寄存器在程序其他地方没有被赋值。如果不加volatile并且开启了优化,那么编译器可能会默认你的寄存器TXBUF的值只需要被赋值一次。在这种情况下,编译器可能会把你第一次a赋值给寄存器TXBUF的指令a=TXBUF;去除。你在接收端就只能接收到b的数据,而a的数据已经被编译器优化删掉了。
当然不同编译器,指令集不一样,优化处理的方式方法也有差异。并且同一个编译器也有不同的优化级别选项。可能你选低级别的优化选项,上述问题就可以避免。

使用特权

评论回复
12
谈的元|  楼主 | 2012-9-7 22:06 | 只看该作者
11楼说了 一个 例子不错,

再等其他的 实例。

相信经过几个实例的说明,理解会更深刻。

使用特权

评论回复
13
21mk| | 2013-4-22 10:30 | 只看该作者
这个的话就是前后的一种比较吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

98

主题

3872

帖子

6

粉丝