Volatile關鍵字的作用
阿新 • • 發佈:2017-09-15
多任務 中斷 con detail 需要 spa tails 存儲器 應該
定義:詞義,易變的, 實質是直接存取原始內存地址
(1)作用
volatile關鍵詞影響編譯器編譯的結果,用 volatile聲明的變量表示該變量隨時可能發生變化,與該變量有關的運算,不要進行編譯優化,以免出錯
1.告訴編譯器不要做任何優化
2.用volatile定義的變量會在程序外被改變,每次都必須從原始內存中讀取,而不能重復使用放在cache或寄存器中的備份
(2)為什麽會可能內改變?
變量可能被當前代碼之外的因素而改變:
1.中斷服務程序中修改的供其它程序檢測的變量需要加volatile:中斷處理程序isr中更改了這個變量的值
2.多任務環境下各任務間共享的標誌應該加volatile:多線程中在別的線程更改了這個變量的值
3.存儲器映射的硬件寄存器通常也要加voliate:硬件自動更改了這個變量的值(一般這個變量是一個寄存器的值)
(3)幾個問題
1.一個參數既可以是const還可以是volatile嗎?
可以的,例如只讀的狀態寄存器。它是volatile因為它可能被意想不到地改變。它是const因為程序不應該試圖去修改它
2.一個指針可以是volatile 嗎?
可以,當一個中服務子程序修該一個指向一個buffer的指針時
註意:頻繁地使用volatile很可能會增加代碼尺寸和降低性能,因此要合理的使用volatile
參考 http://blog.csdn.net/dev_linux/article/details/44829549
Volatile關鍵字的作用