freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

freescalemc9s08單片機(jī)原理與應(yīng)用第06章(編輯修改稿)

2024-09-26 14:42 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 /void main (void){ MyFunction()。 /* 第一次進(jìn)入MyFunction之前,myVar=0 */ MyFunction()。 /* 第二次進(jìn)入MyFunction之前,myVar=1 */}void MyFunction (void){ static char myVar = 0。 /* 本地變量聲明為static */ myVar = myVar + 1。 /* myVar是本地變量,但它保持了自己的值 */} 以上程序的結(jié)果為,在第一次調(diào)用函數(shù)MyFunction()后,變量myVar等于1,第二次調(diào)用后,變量myVar等于2。6. 關(guān)鍵字“static”的使用 在函數(shù)體內(nèi)聲明的靜態(tài)變量,在函數(shù)調(diào)用期間保持其值不變; 在模塊內(nèi)聲明的靜態(tài)變量,能被模塊內(nèi)所有函數(shù)訪問(wèn); 在模塊內(nèi)聲明的靜態(tài)函數(shù),只能被模塊內(nèi)函數(shù)調(diào)用。 7. 可變(volatile)變量 可變變量是其值在正常程序流程以外可能改變的變量。在嵌入式系統(tǒng)中,主要有兩種引起這個(gè)現(xiàn)象的原因: 一是中斷服務(wù)程序,二是硬件動(dòng)作。例如,通過(guò)串口接收到一個(gè)字符,然后串口狀態(tài)寄存器的值會(huì)發(fā)生改變,這完全在程序流程之外發(fā)生。 在嵌入式設(shè)備中,最好將所有外設(shè)寄存器聲明為volatile。 下面通過(guò)一個(gè)例子來(lái)看看編譯器是怎樣處理一個(gè)volatile和一個(gè)非volatile變量。 volatile unsigned char PORTA @0x00。 volatile unsigned char SCS1 @0x16。 unsigned char value。 void main(void) { PORTA = 0x05。 /* PORTA = 00000101 */ PORTA = 0x05。 /* PORTA = 00000101 */ SCS1。 value = 10。 } 未使用volatile關(guān)鍵字,編譯器將其編譯為:CLIMOV 0X05,0X00LDA 0X0ASTA 0X0100STA 0X1800使用volatile關(guān)鍵字后,編譯器將其編譯為:CLIMOV 0X05,0X00MOV 0X05,0X00LDA 0X16LDA 0X0ASTA 0X0100STA 0X1800 這段代碼實(shí)際上不做任何事,但它很好地表達(dá)了優(yōu)化怎樣強(qiáng)烈地影響程序的結(jié)果。在main()函數(shù)中連續(xù)兩次使用語(yǔ)句“PORTA=5?!保@沒(méi)有意義,但讓我們假設(shè)這是正確開發(fā)程序所必需的。在這兩個(gè)語(yǔ)句之后,明顯地有一條無(wú)意義語(yǔ)句“SCS1?!?。讓我們看當(dāng)不使用volatile變量會(huì)發(fā)生什么。 我們得到了優(yōu)化過(guò)的匯編代碼。重復(fù)的語(yǔ)句“PORTA=5。”消失了,只剩下一句“STAB 0x300”。語(yǔ)句“SCS1?!彼坪跏裁炊疾蛔觯虼寺斆鞯木幾g器將它消去了。最后,將10加載到累加器并存儲(chǔ)。 使用volatile關(guān)鍵字聲明PORTA 和SCS1,得到的匯編代碼沒(méi)有優(yōu)化,連續(xù)兩次在PORTA寫入數(shù)值5,然后將SCS1加載到累加器。最后由于累加器被使用,于是用X寄存器存儲(chǔ)數(shù)據(jù)10。 加載SCS1到累加器是很有用的,這是串行通信接口SCI需要的,讀SCS1寄存器目的是清除任何未決的標(biāo)志。無(wú)意義的語(yǔ)句“SCS1?!北环g為讀寄存器的的匯編語(yǔ)句,這將清除SCI中未決的標(biāo)志。 在嵌入式設(shè)備中將所有外設(shè)寄存器聲明為volatile是一個(gè)好習(xí)慣。在分開的頭文件中定義所有外設(shè)的名字,能使所寫代碼更友好并簡(jiǎn)化移植。8. Const變量 關(guān)鍵字“const”是C語(yǔ)言中命名最差的關(guān)鍵字,它并不表示恒量,而是代表“只讀”。在嵌入式系統(tǒng)中,這點(diǎn)就有很大的不同了。 const聲明可用于任何變量,它告訴編譯器將其存貯在ROM區(qū),所以如此聲明的變量值是不可以改變的。 由于它作為常量工作,必須賦初值。如:const double PI = 。 const 變量與明顯的常數(shù)相對(duì),很多原文要求用const變量代替明顯的常數(shù)。例如:用“const unsigned char channels = 8?!贝妗癲efine CHANNELS 8”。 Const的用法:const unsigned short a。unsigned short const a。const unsigned short *a。unsigned short * const a。9. Const volatile 變量 現(xiàn)在討論一個(gè)深?yuàn)W的問(wèn)題,一個(gè)變量既能是常量,又能是可變量嗎?如果是這樣,這意味什么,怎樣使用?答案是“能”。 這個(gè)修飾符應(yīng)該用于能出乎意料地改變?nèi)魏未鎯?chǔ)器位置,因此需要volatile限定語(yǔ), const代表變量是只讀的。 最明顯的例子是硬件的狀態(tài)寄存器,像SCI狀態(tài)寄存器SCS1。這個(gè)寄存器包含信號(hào)狀態(tài)標(biāo)志,如發(fā)送空、發(fā)送完成、接收滿和其他標(biāo)志位。這是一個(gè)依賴于串口通信狀態(tài)的可變寄存器,但標(biāo)志不能被程序直接改寫,所以是只讀的,它們只對(duì)模塊的狀態(tài)作出響應(yīng)。這個(gè)狀態(tài)寄存器最佳聲明方法是: const volatile unsigned char SCS1 @0x0016 資源映射1. 訪問(wèn)固定的內(nèi)存位置 嵌入式系統(tǒng)的特點(diǎn)是需要編程者訪問(wèn)一個(gè)指定的存儲(chǔ)器位置。 比如在某個(gè)項(xiàng)目中需要將絕對(duì)地址0x2FFA處的整型變量值設(shè)為0xAA55。完成這個(gè)任務(wù)的代碼是: int * ptr。 ptr = (int *)0x2FFA。 *ptr = 0xAA55。2. 訪問(wèn)I/O寄存器 在嵌入式領(lǐng)域,需要管理和訪問(wèn)微控制器的片上資源,比如I/O寄存器和控制寄存器等。那么怎樣訪問(wèn)這些寄存器呢? 一個(gè)方法是使用“define”定義: define PORTA ( * ( volatile unsigned char * ) 0x0000 ) 這就構(gòu)成了I/O寄存器,PORTA為地址0x0000處字符型變量?!癲efine”實(shí)際做的是每次發(fā)現(xiàn)PORTA時(shí)放置一個(gè)構(gòu)件。也就是說(shuō)在代碼中寫“PORTA = 0x3F”,實(shí)際做的就是告訴編譯器0x0000是一個(gè)“volatileunsignedchar”類型的指針,它的內(nèi)容為0x3F。 另一個(gè)方法是在變量聲明中使用符號(hào)“@”,在地址0x0000處創(chuàng)建一個(gè) volatileunsignedchar型的變量PORTA。 volatile unsigned char PORTA @0x0000。 這是一個(gè)編譯器特定的語(yǔ)法,它可讀性高,但兼容性不好。如果使用另一個(gè)編譯器去編譯該代碼,就發(fā)現(xiàn)“@”不能夠被識(shí)別。CodeWarrior支持這個(gè)特殊語(yǔ)法。 C編譯器允許在代碼中使用匯編指令,具體形式見如下代碼:_asm AssemblyInstuction。asm (AssemblyInstruction)。asm { AssemblyInstruction AssemblyInstruction }3. 位操作 在嵌入系統(tǒng)中,在一個(gè)給定的地址,一次能訪問(wèn)和修改數(shù)據(jù)的一位或幾位。C語(yǔ)言有很多方法來(lái)完成這個(gè)任務(wù)。 位結(jié)構(gòu): 效率隨編譯器的不同而改變,不具
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1