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