C語言之volatile關鍵字的常用特點

在嵌入式項目開發過程中,我們經常遇到_IO,_I,_O等前綴在類型之前,在常用的單片機開發中可以查看到這些符號的本身是代指volatile關鍵字,關於_IO
在系統級應用中的深入含義及用法暫且不做介紹,這裏簡單記錄一下裸機開發過程中的常規知識點;

volatile 關鍵字是一種類型修飾符,用它聲明的類型變量表示可以被某些編譯器未知的因素更改,比如:操作系統、硬件或者其它線程等。遇到這個關鍵字聲明的變量,編譯器對訪問該變量的代碼就不再進行優化,從而可以提供對特殊地址的穩定訪問。
比如下面兩句聲明:

int volatile WInt;
int MInt;

volatile 指出 WInt 是隨時可能發生變化的,每次使用它的時候必須從 WInt的地址中讀取,因而編譯器生成的彙編代碼會重新從WInt的地址讀取數據。而優化做法是,由於編譯器發現兩次從 WInt讀數據的代碼之間的代碼沒有對 WInt 進行過操作,它會自動把上次讀的數據再次傳遞出去。而不是重新從WInt裏面讀。
這樣一來,如果WInt是一個寄存器變量或者表示一個端口數據就容易出錯,所以說 volatile 可以保證對特殊地址的穩定訪問

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章