volatile與const的實際使用

2021-10-16 04:58:15 字數 1316 閱讀 7641

#define     __i     volatile const            

/*!< defines 'read only' permissions */

#define __o volatile

/*!< defines 'write only' permissions */

#define __io volatile

/*!< defines 'read / write' permissions */

volatile:使用該關鍵字修飾變數時,則不從cache讀取值,而是從變數位址處讀取值,防止因其他地方(如硬體引腳、程式其他地方)修改變數值後導致讀取變數值不準確的問題。

volatile表明變數能被後台程式修改

volatile const : 狀態隨時會被外界改變,但是cpu內部不能改變這個值狀態,也就是read only

使用場景

一般說來,volatile用在如下的幾個地方:

1、中斷服務程式中修改的供其它程式檢測的變數需要加volatile;

2、多工環境下各任務間共享的標誌應該加volatile;

3、儲存器對映的硬體暫存器通常也要加volatile說明,因為每次對它的讀寫都可能由不同意義;

乙個例子:

int

main

(void

)

彙編後

mov     r3, #805306368

ldr r2, [r3] ①

ldr r0, [r3] ②

mul r0, r2, r0

bx lr

程式本意是要計算平方。如果這段**在執行至①這行彙編時,被排程開了,過了一陣排程回來繼續執行②行,此時完全有可能 r2 != r0。那麼計算出來的結果r0必然不等於那個平方值。

//    1 int main(void)

// 2

【注】:iar優化等級開low時的效果,與加volatile關鍵字相同。

const與volatile使用示例

int sum1 普通變數 const int sum2 唯讀變數 int ptr 普通指標變數,指向普通變數 const int ptr 普通指標變數,指向唯讀變數 int const ptr 唯讀指標變數,指向普通變數 const int const ptr 唯讀指標變數,指向唯讀變數 int ...

C C 語言中const與volatile

1.在c語言中,const的意思是 乙個不能被改變的普通變數 它總是占用儲存空間而且它的名字是全域性的。c編譯器不能把const堪稱乙個編譯器間的常量。所以在c中你可以這麼寫 const int bufsize 不賦值。但不能這麼寫 cosnt bufsize 100 char buf bufsiz...

const和volatile的區別

一.關鍵字const有什麼含意?只要一聽到說 const意味著常數 就知道我正在和乙個業餘者打交道。去年dan saks已經在他的文章裡完全概括了const的所有用法,因此esp 譯者 embedded systems programming 的每一位讀者應該非常熟悉const能做什麼和不能做什麼....