给一个变量置上 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;