0
问答首页 最新问题 热门问题 等待回答标签广场
我要提问

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

20120903

请具体举例 volatile 非用不可的几个情况,不用的volatile可能问题,

最好说明单片机类型,有代码说明最好

不要再解释volatile的含义,不要贴出网络上有的解释

例子多多为善。
提问者:jjdwe 地点:- 浏览次数:1758 提问时间:05-01 02:18
我有更好的答案
提 交
11条回答
烈阳异丙醇 05-05 05:43
顶一个。。。
asd011 05-02 17:24
没有这样的例子。
hfjydz2013 05-10 17:37
属于共享变量,而编译器不知道的.

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


请继续,


等例子说明,


不然怎么能应用自如,


不然怎么能看出代码问题?
77uwfsdf 05-10 03:50
volatile 是针对“代码优化”的,即告诉编译系统“此变量可能自变,注意其优化处理”。

如果完全不考虑优化,则不用volatile也无妨。
60user193 05-02 05:08
在特定的应用中必须要用volatile,现在就等大家举应用的事例了
testd018 05-02 10:34
会在中断中被修改的全局变量,裸奔时最常见。
多线程共享的全局变量。
胡政鹏测试_6 05-02 20:52
很好的東西 非常不錯
yweyrwyds 05-06 17:10


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

再等其他的 实例。

相信经过几个实例的说明,理解会更深刻。
wang222221 05-04 02:14
这个的话就是前后的一种比较吗
撰写答案
提 交
1 / 3
1 / 3