當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > c-v關(guān)鍵字
c-v關(guān)鍵字就是const-volatile關(guān)鍵字的簡(jiǎn)寫。下面我們來(lái)對(duì)const與volatile關(guān)鍵字進(jìn)行一個(gè)簡(jiǎn)單的理解。
Const關(guān)鍵字的作用是聲明一個(gè)只讀變量,其限定一個(gè)變量不允許被改變。因此使用const關(guān)鍵字可以提高系統(tǒng)的安全性和穩(wěn)定性。下圖所示的一個(gè)例子顯示了用const修飾的變量,當(dāng)你試圖對(duì)這個(gè)變量進(jìn)行修改的時(shí)候,編譯器會(huì)提示你assignment of read-only variable 'a'。表示該變量是只讀的,就像文件是只讀是,你無(wú)法對(duì)其進(jìn)行寫入操作一樣。
Volatile關(guān)鍵字的作用是聲明變量在程序執(zhí)行中可以被隱含的改變,這一改變主要是系統(tǒng)內(nèi)部進(jìn)行而非用戶進(jìn)行人為的修改。功能是在編譯程序的過(guò)程中確保本條指令不會(huì)因編譯器的優(yōu)化而省略,且要求每次直接讀值。防止編譯器對(duì)代碼進(jìn)行優(yōu)化。該關(guān)鍵字常用于以下幾種情況:并行設(shè)備的硬件寄存器;一個(gè)中斷服務(wù)子程序中會(huì)訪問(wèn)到的非自動(dòng)變量;多線程應(yīng)用中被幾個(gè)任務(wù)共享的變量。
似乎const這個(gè)只讀的還有volatile這一可變的關(guān)鍵字是一對(duì)矛盾體,但是有一種情況下const與volatile放在一起使用。狀態(tài)寄存器中const與volatile一起使用。狀態(tài)寄存器又名條件碼寄存器,它是計(jì)算機(jī)系統(tǒng)的核心部件——運(yùn)算器的一部分,狀態(tài)寄存器用來(lái)存放兩類信息:一類是體現(xiàn)當(dāng)前指令執(zhí)行結(jié)果的各種狀態(tài)信息(條件碼),如有無(wú)進(jìn)位(CF位)、有無(wú)溢出(OV位)、結(jié)果正負(fù)(SF位)、結(jié)果是否為零(ZF位)、奇偶標(biāo)志位(P位)等;另一類是存放控制信息(PSW:程序狀態(tài)字寄存器),如允許中斷(IF位)、跟蹤標(biāo)志(TF位)等。有些機(jī)器中將PSW稱為標(biāo)志寄存器FR(Flag Register)。如圖所示
在標(biāo)志寄存器中,狀態(tài)隨著系統(tǒng)的運(yùn)行會(huì)發(fā)生變化,而狀態(tài)寄存器的內(nèi)容也會(huì)同時(shí)發(fā)生變化,因此需要使用volatile來(lái)修飾,然而這一狀態(tài)卻不應(yīng)該被人為的或者非系統(tǒng)的一些程序修改其中的內(nèi)容,因此同樣必須是const只讀的。