发新帖我要提问
12
返回列表
打印

关于volatile很纠结!

[复制链接]
楼主: areshan
手机看帖
扫描二维码
随时随地手机跟帖
21
nongfuxu| | 2011-6-18 18:19 | 只看该作者 回帖奖励 |倒序浏览
"优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。"
学习了.

使用特权

评论回复
22
lzeng| | 2011-6-21 20:14 | 只看该作者
15# ahgao

学习了!程序编译过程中,如果变量没有在程序中被修改过,那编译器认为值不变,于是会进行“优化”。中断是不可预知的,在中断中修改变量值也就是不可预知的了,如果中断中修改了变量值,编译器并不能知道何时发生修改,所以,要保证中断有效,中断中修改的变量必须要是volatile。同样的,在多任务环境下,多个任务对同一个变量操作,不仅有临界区问题(单个任务在操作变量时,不允许被打断,特别不允许任务切换),也因为多任务的切换是中断型的(例如uC/OS-II),所以编译器不能知道变量的修改在哪里发生,会单纯认为没有变化,因此,也会进行“优化”。
楼上的方法很好,能说明volatile的本质,学习ing:)

使用特权

评论回复
23
armmage| | 2011-6-22 13:45 | 只看该作者
讨论的挺热烈的嘛,话说编译优化这东西,每个编译环境都有设置,一般我习惯不做任何速度方面的优化,大家讨论的VOLATILE其实就是跟编译器速度优化匹配使用的东西,反过来说,如果你不让编译器优化程序运行速度,那么用不用VOLATILE都可以。本人经验证后猜测的。

使用特权

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

本版积分规则