此帖出自模拟与混合信号论坛
最新回复
本帖最后由 dontium 于 2015-1-23 13:25 编辑 说白了,如果一个值会在编译器不知道的情况下被改变,那么你要使用volatile。
比如你从一个地址取值,a=*(void *)0xxxxxxxx, 而这个地址可以被外设改变,编译器当然是不知道的,那么,这样的程序你就要加上volatile。
a=*(void *)0xxxxxxxx;//1
b=a+1;//2
对于这样的程序,第一句话给变量a赋了值,而第一句和第二句程序之间,并没有改变a的值的语句,那么,编译器认为a的值没有被改变,那么就会把第一个语句中被赋值的a的值加1赋给b.
如果,在第1条语句和第二条语句之间,(void *)0xxxxxxxx地址的内容由外界做了改变,编译器是不会知道的。如果你要在第二条语句中,使用被改变后a的值,而不是第一条语句中a的值,那你就要声明a为volatile型变量。
详情
回复
发表于 2007-6-12 06:26
| ||
|
||
此帖出自模拟与混合信号论坛
| ||
|
||
EEWorld Datasheet 技术支持