新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > C語言類型修飾符Volatile的使用

        C語言類型修飾符Volatile的使用

        作者: 時間:2016-11-29 來源:網絡 收藏
          volatile關鍵字是一種類型修飾符,用它聲明的類型變量表示可以被某些編譯器未知的因素更改,比如 操作系統、硬件或者其它線程等。遇到這個關鍵字聲明的變量,編譯器對訪問該變量的代碼就不再進行 優化,從而可以提供對特殊地址的穩定訪問。volatile區分C程序員和嵌入式系統程序員的最基本的問題。搞嵌入式的家伙們經常同硬件、中斷、RTOS等等打交道,所有這些都要求用到volatile變量。不懂得volatile的內容將會帶來災難。int volatile nVint; 當要求使用volatile 聲明的變量的值時,系統總是重新從它所在的內存讀取數據,即使它前面的指令剛剛從該處讀取過數據。而且讀取的數據立刻被保存。 由于訪問寄存器的速度要快過RAM,所以編譯器一般都會作減少存取外部RAM的優化,對于變量, 編譯器發現兩次從i讀數據的代碼之間的代碼沒有對i進行過操作,它會自動把上次讀的數據放在b中。而不是重新從i里面讀取. 這樣以來,如果i是一個寄存器變量或者表示一個端口數據就容易出錯,所以說volatile可以保證對特殊地址的穩定訪問。volatile 指出 i是隨時可能發生變化的,每次使用它的時候必須從i的地址中讀取.•;存儲器映射的硬件寄存器通常也要加volatile說明,因為每次對它的讀寫都可能由不同意義,如并行設備的硬件寄存器(如:狀態寄存器)•;中斷服務程序中修改的供其它程序檢測的變量需要加volatile,如一個中斷服務子程序中會訪問到的非自動變量(Non-automatic variables)•;多任務環境下各任務間共享的數據,如多線程應用中被幾個任務共享的變量

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 同德县| 元氏县| 光泽县| 淄博市| 奉化市| 措勤县| 弋阳县| 荆门市| 博湖县| 沙田区| 双鸭山市| 营山县| 油尖旺区| 新源县| 斗六市| 呼图壁县| 广西| 库车县| 嘉峪关市| 龙州县| 三明市| 莆田市| 西乌珠穆沁旗| 内江市| 左权县| 临西县| 屏山县| 奈曼旗| 嘉黎县| 芮城县| 合江县| 油尖旺区| 安平县| 永福县| 饶阳县| 固镇县| 合山市| 茂名市| 施秉县| 宾川县| 呼图壁县|