给一个变量置上 volatile
标识符,表示要求编译器不对此变量做优化。
比如这样一段代码:
uint32 status = 0;
while (status == 0)
{
/*Let us assume that status isn't being changed
in this while loop or may be in our whole program*/
/*So long as status (which could be reflecting
status of some IO port) is ZERO, do something*/
}
如果 while
循环体中 status
的值不会被改变,那编译器可能认为 status
的值一直是 0,并不需要在 while
中做判断。因此它可能把代码优化为 while (true)
的形式。
但是有些情况下,编译器是感知不到 status
值的变化的。比如你在写驱动程序,使用到某种 memory-mapped 内存时,内存的值可能随着外部 I/O 的变化而变化,因此这种情况下编译器无法从代码中感知到值会变化,此时需要给变量置上 volatile
标识符:
volatile uint32 status = 0;