Volatile的用法
仪器信息网 · 2012-09-15 07:16 · 42921 次点击
Volatile的用法
volatile相当于告诉编译器,由它声明的东西的易变的,不确定的,可能由外部程序(如中断程序)改变的,禁止编译器对其读写操作进行优化,如果定义:
inti;
则编译器可能会将其优化,而放到CPU寄存器中,这在多数情况下是好的,然而在有些情况下,我们会要求一些变量必须在内存中(如驱动程序,中断处理程序等等),这时编译器这个优化就是引起问题,为了避免这种情况,应该这样定义:
volatileinti;
PS:volatile通常也用来阻止编译器具优化操作,如你有一个非精确延时函数:
voiddelay(unsignedinttimeout)
{
unsignedinti;
for(i=0;i
}
有些编译会足够聪明地注意到这个函数本质上是什么也没干,会将针对这个函数的调用优化掉,但这样是不对的,所以你应该这么声明:
volatilevoiddelay(...)
{
//同上
}