extern:外部變量聲明
如果在一個(gè) C 程序文件中要使用一些變量但其原型定義寫(xiě)在另外的文件中,那么在本文件中必須將這些變量聲明成“extern”外部類型。例如程序文件 code1.c 中有如下定義:
unsigned char var1, var2; //定義了兩個(gè)變量
在另外一個(gè)程序文件 code2.c 中要對(duì)上面定義的變量進(jìn)行操作,則必須在程序的開(kāi)頭定義:extern unsigned char var1, var2; //聲明外部變量 ?
volatile — 易變型變量聲明
CMS C 中還有一個(gè)變量修飾詞在普通的 C 語(yǔ)言介紹中一般是看不到的,這就是關(guān)鍵詞
“volatile”。顧名思義,它說(shuō)明了一個(gè)變量的值是會(huì)隨機(jī)變化的,即使程序沒(méi)有刻意對(duì)它進(jìn)行任何賦值操作。在單片機(jī)中,作為輸入的 IO 端口其內(nèi)容將是隨意變化的;在中斷內(nèi)被修改的變量相對(duì)主程序流程來(lái)講也是隨意變化的;很多特殊功能寄存器的值也將隨著指令的運(yùn)行而動(dòng)態(tài)改變。所有這種類型的變量必須將它們明確定義成“volatile”類型,例如:
volatile unsigned char STATUS @ 0x03;
volatile bit commFlag;
“volatile”類型定義在單片機(jī)的 C 語(yǔ)言編程中是如此的重要,是因?yàn)樗梢愿嬖V編譯器的優(yōu)化處理器這些變量是實(shí)實(shí)在在存在的,在優(yōu)化過(guò)程中不能無(wú)故消除。假定你的程序定義了一個(gè)變量并對(duì)其作了一次賦值,但隨后就再也沒(méi)有對(duì)其進(jìn)行任何讀寫(xiě)操作,如果是非volatile 型變量,優(yōu)化后的結(jié)果是這個(gè)變量將有可能被徹底刪除以節(jié)約存儲(chǔ)空間。另外一種情形是在使用某一個(gè)變量進(jìn)行連續(xù)的運(yùn)算操作時(shí),這個(gè)變量的值將在第一次操作時(shí)被復(fù)制到中間臨時(shí)變量中,如果它是非 volatile 型變量,則緊接其后的其它操作將有可能直接從臨時(shí)變量中取數(shù)以提高運(yùn)行效率,顯然這樣做后對(duì)于那些隨機(jī)變化的參數(shù)就會(huì)出問(wèn)題。只要將其定義成 volatile 類型后,編譯后的代碼就可以保證每次操作時(shí)直接從變量地址處取數(shù)。
FSR 寄存器:
FSR=Feedback Shift Register 反饋移位寄存器,間接尋址
CMS仿真器使用:
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。