用volatile關鍵字防止變數被編譯器優化

2021-06-01 01:24:44 字數 803 閱讀 8046

用volatile關鍵字防止變數被編譯器優化

2010-02-04 11:18

。。。。

為了避免這種情況,我們使用volatile關鍵字來防止程式被編譯器優化。具體的使用方法,我們用下面的程式來說明』

extern volatile int event_flag

這樣宣告event_flag全域性變數的話,就不用擔心event_flag 被優化掉,程式將按照設計來執行。

■還有乙個例子

對於條件分歧以外,還有一下的例子

extern int* p_regster1;

extern int* p_regster2;

void set_regester2(int val)

您可能看到p_register1 被賦值兩次,還有p_register2也是,編譯器認為,你怎麼這麼笨,定義兩次,於是就把成程式優化為下面

void set_regester2(int val)

這樣的話,我們所規定的程式沒有辦法設定,可能導致一些想不到的問題。

為了迴避這個問題,我們必須用volitile來避免這個問題

extern volitile int* p_regster1;

extern volitile int* p_regster2;

現在微控制器的編譯器越來越先進,在很多地方,我們不再需要直接寫彙編**,但是在如果對編譯器的優化程式沒有深刻的理解,像上面的問題,就很危險,因為嵌入式工作在無人的環境中,因此對於編譯器的理解,還有要需要一定程式的學習。

最後希望您能通過本文了解volitile的基本使用。 如果有什麼錯誤的地方,懇請您的指出。

關鍵字 volatile關鍵字的作用

1.volatile關鍵字是防止在共享的空間發生讀取的錯誤。只保證其可見性,不保證原子性 使用volatile指每次從記憶體中讀取資料,而不是從編譯器優化後的快取中讀取資料,簡單來講就是防止編譯器優化。2.在單任務環境中,如果在兩次讀取變數之間不改變變數的值,編譯器就會發生優化,會將ram中的值賦值...

關鍵字volatile詳解

與關鍵字const一樣,關鍵字volatile也是乙個型別修飾符 type specifier 關於volatile的作用 例如程式清單 volatile int m 10 int k,n m k i volatile將告訴編譯器,整形變數m是隨時發生變化的,每次使用m的時候,都要求從m的位址中找出...

volatile關鍵字 詳解

volatile 關鍵字 volatile關鍵字是一種型別修飾符,用它宣告的型別變數表示可以被某些編譯器未知的因素更改,比如 作業系統 硬體或者其它執行緒等。遇到這個關鍵字宣告的變數,編譯器對訪問該變數的 就不再進行優化,從而可以提供對特殊位址的穩定訪問。使用該關鍵字的例子如下 int volati...