#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
)
程式本意是要計算平方。如果這段**在執行至①這行彙編時,被排程開了,過了一陣排程回來繼續執行②行,此時完全有可能 r2 != r0。那麼計算出來的結果r0必然不等於那個平方值。mov r3, #805306368
ldr r2, [r3] ①
ldr r0, [r3] ②
mul r0, r2, r0
bx lr
// 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能做什麼和不能做什麼....