將一個變量說明爲volatile表示這個變量是「易變的」。若是一個變量會被其它引用改變,或在其它並行的任務中會被改變(例如中斷服務程序),都要顯式地說明爲「volatile」,不然在編譯器優化階段會做出錯誤的判斷,例如將這個變量讀入寄存器之後,在沒有對這個變量賦值之前,會一直使用寄存器中的值,而實際上這個變量的值可能已經被一個指針引用改變了,或者是在中斷服務程序中被改變了,下面這個例子說明這種錯誤:
有一個變量T,在定時中斷中每隔一個固定時間減一,而後在主程序中等待它減到0
unsigned char T;
void T0_int( void ) interrupt 1
{
...
T--;
...
}
int main( int )
{
...
T = 10;
while ( T != 0 ); /* 這在某些編譯器中將成爲一個死循環,而不是預想的等待一段時間 */
...
}
正確的寫法應該是將第一句改成:
volatile unsigned char T;ide