volatile關鍵字

       將一個變量說明爲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

相關文章
相關標籤/搜索