C语言关键字(3)——volatile
volatile的意思是不稳定的,易变的。volatile作为关键字声明变量之后,每次对该变量的访问都会去访问该变量的内存单元,而非寄存器。因为代码经过编译优化之后,在访问一些变量时,直接从寄存器访问。下面看一段示意代码:
byte flag = 0;
...
void func(void){
if(flag)
do something...
else
do something...
}
如果变量flag是在某一中断函数中去改变,会发现在函数func中,一直都是执行else后面的语句。
如果修改为
volatile byte flag = 0;
则就达到想要的结果了。
一般来说,volatile常用在三个地方:
- 在中断服务程序中修改的变量在其它地方作为条件检测来使用;
- 多任务或多线程中共享的变量;
- 存储器映射的硬件寄存器。