筆記 對volatile關鍵字在DSP中的理解

2022-07-20 01:18:11 字數 359 閱讀 5843

dsp將暫存器變數都對映到相應的暫存器位址,因此經常會見到這樣宣告的語句:

volatile

struct

epwm_regs 

*epwm[pwm_ch] =;

那麼,為什麼

需要vola

tile 這個關鍵字呢?

該單詞的意思是可變的,易變的。在dsp中,一些暫存器的值的變化有兩種情況:(1)硬體上導致的變化,例如中斷、adc等;(2)軟體上的變化,例如對某個變數賦值等。

當加入了關鍵字volatile,則表示該變數的值可因上述兩種情況而發生變化;即,對軟體來說,硬體上變化的值是不可預知的,加入了該關鍵字,提示編譯器每次讀取該變數時,都要直接讀取該變數位址中的暫存器!

對volatile關鍵字的理解

來看下面這樣乙個例子 public class threadtest backgroundthread.start timeunit.seconds.sleep 1 stoprequested true 我們希望backgroundthread 執行緒能夠在睡眠一秒後停止,但是實際情況是執行緒陷入了...

對volatile關鍵字的理解

volatile關鍵字是給編譯器看的,c語言是一種操作性語言,與硬體底層關係比較密切,尤其是在嵌入式領域。比如如下程式 a 1 a 2 a 4 printf d n a 經過編譯器優化後可能就變成了 a 4 printf d n a 無形中a 1和 a 2的操作就被省去了,表面是沒問題,但是在嵌入式...

對volatile關鍵字的理解

如果volatile變數與普通變數發 了重排序,雖然volatile變數能保證記憶體可 性,但是可能導致普通變數讀取錯誤 jvm通過記憶體屏障來實現限制處理器的重排序。編譯器在生成位元組碼時,會在指令序列中插入記憶體屏障來禁止特定型別的處理器重排序 編譯器選擇了 個 較保守的jmm記憶體屏障插 策略...