非操作系統(tǒng)下的實(shí)驗(yàn)嵌入式實(shí)驗(yàn)報(bào)告_第1頁(yè)
非操作系統(tǒng)下的實(shí)驗(yàn)嵌入式實(shí)驗(yàn)報(bào)告_第2頁(yè)
非操作系統(tǒng)下的實(shí)驗(yàn)嵌入式實(shí)驗(yàn)報(bào)告_第3頁(yè)
非操作系統(tǒng)下的實(shí)驗(yàn)嵌入式實(shí)驗(yàn)報(bào)告_第4頁(yè)
非操作系統(tǒng)下的實(shí)驗(yàn)嵌入式實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 Harbin Institute of Technology實(shí)驗(yàn)報(bào)告 課程名稱(chēng): 嵌入式系統(tǒng) 院 系: 電信學(xué)院 班 級(jí): 1105301 姓 名: 張常樂(lè) 學(xué) 號(hào): 1110530110 指導(dǎo)教師: 任廣輝 實(shí)驗(yàn)時(shí)間: 2014年12月 哈爾濱工業(yè)大學(xué)42 / 42文檔可自由編輯打印第二章 非操作系統(tǒng)下的實(shí)驗(yàn)2.2 GPIO接口實(shí)驗(yàn)2.2.1 實(shí)驗(yàn)?zāi)康?. 熟悉ADS軟件的使用2. 熟悉程序的下載和調(diào)試流程3. 熟悉GPIO的操作2.2.2 實(shí)驗(yàn)原理1)GPIO的原理及寄存器操作GPIO(General Purpose I/O,通用輸入/輸出接口)也稱(chēng)為并行I/O(parallel I/O

2、),是最基本的I/O形式,由一組輸入引腳、輸出引腳或輸入/輸出引腳組成,CPU對(duì)它們能夠進(jìn)行存取操作。GPIO引腳能夠通過(guò)軟件編程改變輸入/輸出方向。S3C2440A共有130個(gè)多功能復(fù)用輸入輸出端口(I/O口),分為端口A端口J共9組。端口A除了作為功能口外,只能夠作為輸出口使用,其他端口都可以為輸入/輸出端口。為了滿足不同系統(tǒng)設(shè)計(jì)的需要,每個(gè)I/O口可以很容易地通過(guò)軟件對(duì)進(jìn)行配置。每個(gè)引腳的功能必須在啟動(dòng)主程序之前進(jìn)行定義。如果一個(gè)引腳沒(méi)有使用復(fù)用功能,那么它可以配置為I/O口。與配置I/O口相關(guān)的寄存器包括:u 端口控制寄存器(GPACONGPJCON)u 端口數(shù)據(jù)寄存器(GPADATG

3、PJDAT)u 端口上拉寄存器(GPBUPGPJUP)以端口B為例,說(shuō)明端口寄存器的配置方式,端口B的寄存器如下所示:端口B控制寄存器:端口B數(shù)據(jù)寄存器:端口B上拉電阻寄存器:2). LED硬件接口電路LED的硬件接口電路如圖2-1所示,LED與ARM的GPB端口連接,需要使用的寄存器有: 3). 蜂鳴器硬件接口電路蜂鳴器的硬件接口如圖2-2所示,其與ARM的GPB端口的第0位GPB0連接,對(duì)其操作涉及的寄存器有4) 按鍵硬件接口電路按鍵硬件接口如圖2-3所示,其采用的上拉的形式,按鍵沒(méi)有按下則管腳的電平為高電平,當(dāng)按鍵按下后,管腳電平為低電平。四個(gè)按鍵分別跟ARM的GPF口的第0、1、2和4

4、位連接,對(duì)其操作涉及的寄存器有: 2.2.3 實(shí)驗(yàn)儀器與設(shè)備1. TQ2440實(shí)驗(yàn)平臺(tái)2. J-LINK 調(diào)試器2.2.4 實(shí)驗(yàn)步驟1實(shí)現(xiàn)控制LED開(kāi)啟關(guān)閉功能(1) 單步調(diào)試?yán)?,也可以雙擊程序中的某一行添加斷點(diǎn),則全速運(yùn)行后程序會(huì)停在斷點(diǎn)處。并且在調(diào)試過(guò)程中觀察LED的變化。寫(xiě)出控制LED開(kāi)啟和關(guān)閉的程序語(yǔ)句和對(duì)應(yīng)LED的狀態(tài),填入下表當(dāng)中序號(hào)程序現(xiàn)象1rGPFDAT=rGPFDAT&(1<<0); /PORTB0為低電平LED0點(diǎn)亮2rGPFDAT=rGPFDAT|(1<<0); /PORTB0為高電平LED0熄滅(2) 例程中實(shí)現(xiàn)的是對(duì)一個(gè)LED的控制,

5、修改例程,寫(xiě)出一個(gè)對(duì)所有LED控制的通用函數(shù),該函數(shù)的參數(shù)有兩個(gè):LED的號(hào)碼和LED的開(kāi)關(guān)狀態(tài)。寫(xiě)出該函數(shù)并且寫(xiě)出調(diào)用該函數(shù)控制4個(gè)LED狀態(tài)的語(yǔ)句和對(duì)應(yīng)現(xiàn)象,填入下表中:序號(hào)程序現(xiàn)象1rGPFDAT&=(1<<0)|(1<<1)|(1<<2)|(1<<3); /PORTB0至3為低電平LED0LED3全部點(diǎn)亮2rGPFDAT|=(1<<0)|(1<<1)|(1<<2)|(1<<3); /PORTB0至3為高電平LED0LED3全部熄滅3rGPFDAT&=(1<<0)|

6、(1<<1)|(1<<2)|(1<<3); /PORTB0至3為低電平delay(20);rGPFDAT|=(1<<0)|(1<<1)|(1<<2)|(1<<3); /PORTB0至3為高電平delay(20);LED0LED3循環(huán)點(diǎn)亮熄滅2. 實(shí)現(xiàn)流水燈功能(1) 利用上面編寫(xiě)的通用的LED控制函數(shù),實(shí)現(xiàn)LED依次亮滅的過(guò)程(流水燈),把流水燈控制的語(yǔ)句填入下表中并描述LED的變化序號(hào)程序現(xiàn)象1rGPFDAT&=(1<<0); /PORTB0為低電平delay(20);rGPFDAT|=(

7、1<<0); /PORTB0為高電平delay(20);rGPFDAT&=(1<<1); /PORTB1為低電平delay(20);rGPFDAT|=(1<<1); /PORTB1為高電平delay(20);rGPFDAT&=(1<<2); /PORTB2為低電平delay(20);rGPFDAT|=(1<<2); /PORTB2為高電平delay(20);rGPFDAT&=(1<<3); /PORTB3為低電平delay(20);rGPFDAT|=(1<<3); /PORTB3為高電平

8、delay(20);LED0LED3循環(huán)點(diǎn)亮熄滅實(shí)現(xiàn)流水燈功能3. 實(shí)現(xiàn)控制蜂鳴器功能(1) 跟LED的控制類(lèi)似,蜂鳴器的控制也是通過(guò)控制IO輸出電平來(lái)控制的。蜂鳴器使用的是GPB0,只需要對(duì)該端口操作即可(2) 寫(xiě)出控制蜂鳴器鳴叫和靜音的語(yǔ)句,并把實(shí)驗(yàn)現(xiàn)象填入下表當(dāng)中序號(hào)程序現(xiàn)象1rGPBDAT=rGPBDAT&(1<<0); /PORTB0為低電平delay(10);rGPBDAT=rGPBDAT|(1<<0); /PORTB0為高電平delay(10);TX實(shí)驗(yàn)板上的蜂鳴器實(shí)現(xiàn)鳴叫和靜音循環(huán)4. 實(shí)現(xiàn)按鍵控制LED功能(1) 寫(xiě)出查詢(xún)按健狀態(tài)函數(shù),并根據(jù)不

9、同的按鍵控制不同的LED亮(2) 按鍵使用的是IO口是GPF0、GPF1、GPF2和GPF4。需要將其配置為輸入的模式,然后讀取數(shù)據(jù)寄存器即可(3) 把按鍵檢測(cè)的程序段和對(duì)應(yīng)的現(xiàn)象寫(xiě)入下表中序號(hào)程序現(xiàn)象1For(j=0;j<4;j+) If(rGPFDAT&=(1<<j)=0) rGPFDAT&=(1<<0);ElserGPFDAT|=(1<<0);程序循環(huán)監(jiān)測(cè)4個(gè)按鍵,當(dāng)按下14對(duì)應(yīng)的按鍵后14的LED對(duì)應(yīng)點(diǎn)亮,松開(kāi)后便熄滅2.2.5 實(shí)驗(yàn)思考題從程序編寫(xiě)的角度,比較51單片機(jī)和SC32440的IO操作的不同之處答:51單片機(jī)可以單獨(dú)

10、對(duì)1bit的位進(jìn)行操作,而SC32440必須一次性對(duì)整個(gè)IO口進(jìn)行操作。2.3 中斷實(shí)驗(yàn)2.3.1 實(shí)驗(yàn)?zāi)康?. 熟悉ARM的中斷操作2. 掌握按鍵檢測(cè)的方法2.3.2 實(shí)驗(yàn)原理1). 中斷的原理和相關(guān)寄存器S3C2440A 中的中斷控制器可以從60個(gè)中斷源接收中斷請(qǐng)求。這些中斷源由內(nèi)部外設(shè)提供,例如DMA控制器、UART、IIC等。當(dāng)接收來(lái)自?xún)?nèi)部外設(shè)和外部中斷請(qǐng)求引腳的多個(gè)中斷請(qǐng)求時(shí),在仲裁過(guò)程后中斷控制器請(qǐng)求ARM920T的FIR或IRQ中斷。S3C2440A中與中斷相關(guān)的寄存器有:u 中斷源掛起寄存器(SRCPND)u 中斷掛起寄存器(INTPND)u 中斷模式寄存器(INTMOD)u

11、中斷屏蔽寄存器(INTMSK)u 中斷優(yōu)先級(jí)寄存器(PRIORITY)S3C2440A中的外部中斷在上述中斷寄存器的基礎(chǔ)上增加了以下寄存器:u 外部中斷控制寄存器(EXTINT02)u 外部中斷濾波寄存器(EINTFLT03)u 外部中斷屏蔽寄存器(EINTMASK)u 外部中斷掛起寄存器(EINTPEND)本次實(shí)驗(yàn)采用了外部中斷EINT0、EINT1、EINT2和EINT4。下面分析相關(guān)寄存器的意義:中斷源掛起寄存器(SRCPND)該寄存器標(biāo)志哪個(gè)中斷源產(chǎn)生中斷請(qǐng)求,產(chǎn)生中斷請(qǐng)求但未必響應(yīng),該寄存器不受中斷屏蔽和優(yōu)先級(jí)的影響。中斷處理函數(shù)需要將其清零以免重復(fù)觸發(fā)。下表列出了SRCPND中部分

12、位的意義中斷掛起寄存器(INTPND)該寄存器標(biāo)志中斷源掛起寄存器(SRCPND)中非屏蔽的且優(yōu)先級(jí)最高的中斷,只有一位被標(biāo)志,該中斷將產(chǎn)生IRQ。中斷處理函數(shù)中應(yīng)該將其清零以防止重復(fù)觸發(fā)。下表列出了INTPND中部分位的意義。中斷模式寄存器(INTMOD)用于選擇中斷源屬于FIQ還是IRQ,只有一個(gè)中斷源能夠配置為FIQ。下表列出了INTMOD中部分位的意義。中斷屏蔽寄存器(INTMSK)該寄存器用于用于屏蔽某些中斷。若某被屏蔽的中斷產(chǎn)生了,中斷源掛起寄存器(SRCPND)相應(yīng)的位仍然會(huì)被置1,但中斷掛起寄存器(INTPND)相應(yīng)的位不會(huì)被置1,該中斷也不會(huì)被處理。下表列出了INTMSK中部

13、分位的意義。外部中斷控制寄存器(EXTINT02)外部中斷控制寄存器(EXTINT02)主要用于配置外部中斷的觸發(fā)方式,觸發(fā)方式有:低電平觸發(fā)、高電平觸發(fā)、下降沿觸發(fā)、上升沿觸發(fā)、雙邊觸發(fā)。下表列出了EXTINT0的部分位的意義。外部中斷屏蔽寄存器(EINTMASK)外部中斷屏蔽寄存器(EINTMASK)用于屏蔽某些外部中斷,當(dāng)其中的位為1時(shí),表示屏蔽對(duì)應(yīng)的中斷源。其部分位的意義如下表所示,本實(shí)驗(yàn)只用到其第4位:外部中斷掛起寄存器(EINTPEND)外部中斷掛起寄存器(EINTPEND)用于標(biāo)志產(chǎn)生中斷請(qǐng)求的外部中斷源,其各位的意義如下所示。2.3.3 實(shí)驗(yàn)儀器與設(shè)備1. TQ2440實(shí)驗(yàn)平臺(tái)

14、2. J-LINK 調(diào)試器2.3.4 實(shí)驗(yàn)步驟1. 打開(kāi)實(shí)驗(yàn)代碼文件夾中的irq_test子文件夾中的工程irq_test.mcp工程2. 閱讀代碼,單步執(zhí)行,體會(huì)void KeyScan_Test(void)函數(shù)里面對(duì)中斷相關(guān)寄存器的設(shè)置方法和意義,了解中斷服務(wù)函數(shù)static void _irq Key_ISR(void)中對(duì)相關(guān)寄存器的設(shè)置方法3. 注意:要進(jìn)入中斷服務(wù)函數(shù),必須全速執(zhí)行程序,不能單步執(zhí)行。因此,可以在中斷服務(wù)函數(shù)static void _irq Key_ISR(void)添加一個(gè)斷點(diǎn),然后點(diǎn)擊全速執(zhí)行程序。當(dāng)按下按鍵后,程序就會(huì)停在斷點(diǎn)處4. 例程中只給出外部中斷0和外

15、部中斷4的程序,只能實(shí)現(xiàn)對(duì)按鍵K2和K4的檢測(cè),仿照對(duì)外部中斷0的配置,完成對(duì)按鍵K1和K3的檢測(cè),寫(xiě)出對(duì)外部中斷1和2的配置代碼還有對(duì)LED的控制程序,并進(jìn)行調(diào)試,把代碼和現(xiàn)象列入下表中序號(hào)程序現(xiàn)象1if(rINTPND=BIT_EINT1)ClearPending(BIT_EINT1);if(rINTPND=BIT_EINT2)ClearPending(BIT_EINT2);檢測(cè)按鍵中斷并清除相應(yīng)中斷掛起位2if(rGPFDAT&(1<<1) = 0 )LED_Control(1,ON);Delay(1000);LED_Control(1,OFF);LED1亮1s后熄滅

16、3if(rGPFDAT&(1<<2) = 0 ) LED_Control(3,ON);Delay(1000);LED_Control(4,OFF);LED3亮1s后熄滅2.3.5 實(shí)驗(yàn)思考題比較實(shí)驗(yàn)2.2和實(shí)驗(yàn)2.3,要實(shí)現(xiàn)檢測(cè)按鍵被按下的功能,采用中斷和查詢(xún)的方法哪個(gè)響應(yīng)的速度會(huì)更快??jī)烧哂惺裁磧?yōu)缺點(diǎn)?答:(1)采用中斷方式的相應(yīng)速度會(huì)更快。(2)查詢(xún)方式,就是在主函數(shù)里面不停循環(huán),查詢(xún)端口狀態(tài),明顯其弊端在于響應(yīng)速度,在處理事件多,處理流程復(fù)雜,函數(shù)嵌套執(zhí)行的情況下,由于處理不過(guò)來(lái)容易丟失事件。中斷方式,是事件觸發(fā)的,換言之只要有事件產(chǎn)生都會(huì)進(jìn)入中斷,并且取得最優(yōu)運(yùn)行,

17、因此響應(yīng)更快,及時(shí)。2.4 定時(shí)器和PWM實(shí)驗(yàn)2.4.1 實(shí)驗(yàn)?zāi)康?. 熟悉ARM的定時(shí)器操作2. 熟悉ARM的PWM操作2.4.2 實(shí)驗(yàn)原理3c2440A有5個(gè)16位的定時(shí)器。其內(nèi)部結(jié)構(gòu)如圖2-10所示。定時(shí)器0、1、2、3有脈寬調(diào)制功能(PWM)。定時(shí)器4有一個(gè)沒(méi)有輸出引腳的內(nèi)部定時(shí)器。定時(shí)器0和1共享一個(gè)8位的預(yù)分頻器(預(yù)定標(biāo)器),定時(shí)器2,3,4共享另一個(gè)8位預(yù)分頻器(預(yù)定標(biāo)器)。每個(gè)定時(shí)器有一個(gè)時(shí)鐘分頻器,其可以生成5種不同的分頻信號(hào)(1/2,1/4,1/8,1/16和TCLK)。每個(gè)定時(shí)器模塊從時(shí)鐘分頻器接收其自己的時(shí)鐘信號(hào),其分頻器從相應(yīng)的8位預(yù)分頻器(預(yù)定標(biāo)器)接收時(shí)鐘。8位的

18、預(yù)分頻器是可編程的且根據(jù)裝載的值來(lái)分頻PCLK,其值存儲(chǔ)在TCFG0和TCFG1寄存器中。當(dāng)定時(shí)器使能,定時(shí)器計(jì)數(shù)緩存寄存器(TCNTBn)的值被裝載到遞減計(jì)數(shù)器中作為其計(jì)數(shù)初始值。定時(shí)器比較緩存寄存器(TCMPBn)有一個(gè)被裝載到比較寄存器中用來(lái)和遞減計(jì)數(shù)的值作比較。每個(gè)定時(shí)器有一個(gè)16位遞減計(jì)數(shù)器。當(dāng)遞減計(jì)數(shù)器為零時(shí),定時(shí)器中斷請(qǐng)求生成通知CPU定時(shí)器操作已經(jīng)完成。當(dāng)定時(shí)器計(jì)數(shù)器達(dá)到0,如果使能自動(dòng)重載功能,則TCNTBn的值會(huì)自動(dòng)裝載到計(jì)數(shù)器中。TCMPBn用于脈寬調(diào)制(PWM)。當(dāng)遞減計(jì)數(shù)器的值和定時(shí)器控制邏輯中的比較寄存器的值匹配時(shí),定時(shí)器控制邏輯改變輸出電平。因此,比較寄存器決定了

19、PWM輸出的占空比。與定時(shí)器有關(guān)的寄存器如下:u 定時(shí)器配置寄存器(TCFG01)u 定時(shí)器控制寄存器(TCON)u 定時(shí)器計(jì)數(shù)緩沖寄存器(TCNTB04)u 定時(shí)器比較寄存器(TCMPB04)u 定時(shí)器觀察寄存器(TCNTO04)下面介紹這些寄存器的主要功能:定時(shí)器配置寄存器(TCFG01)定時(shí)器配置寄存器主要用于設(shè)置預(yù)分頻器的分頻系數(shù)和時(shí)鐘分頻其的分頻比。其各位的定義如下:定時(shí)器控制寄存器(TCON)定時(shí)器控制寄存器的第0位用于啟動(dòng)和關(guān)閉定時(shí)器,如下表所示定時(shí)器計(jì)數(shù)緩沖寄存器(TCNTB04)定時(shí)器計(jì)數(shù)緩沖寄存器用于存儲(chǔ)計(jì)數(shù)初值,當(dāng)使能自動(dòng)裝載功能后,當(dāng)計(jì)數(shù)值為0后,會(huì)把定時(shí)器計(jì)數(shù)緩沖寄存

20、器的值重新裝載進(jìn)計(jì)數(shù)器。定時(shí)器比較寄存器(TCMPB04)當(dāng)計(jì)數(shù)器的值與定時(shí)器比較寄存器的值相等時(shí),將會(huì)導(dǎo)致輸出電平由低電平轉(zhuǎn)為高電平,通過(guò)設(shè)置改寄存器,可以調(diào)整輸出方波的占空比,從而實(shí)現(xiàn)PWM調(diào)整。定時(shí)器比較寄存器如下表所示:2.4.3 實(shí)驗(yàn)儀器與設(shè)備1. TQ2440實(shí)驗(yàn)平臺(tái)2. J-LINK 調(diào)試器2.4.4 實(shí)驗(yàn)步驟1. 打開(kāi)實(shí)驗(yàn)代碼文件夾中的Song_test子文件夾中的工程song_test.mcp工程2. 單步調(diào)試程序,找出基本音符的放音語(yǔ)句,把響應(yīng)的語(yǔ)句和現(xiàn)象列入下表中序號(hào)程序現(xiàn)象1Buzzer_Freq_Set0( 260 );Delay(192*4);蜂鳴器發(fā)出音調(diào)1持續(xù)4

21、拍2Buzzer_Freq_Set0( 294 );Delay(192*4);蜂鳴器發(fā)出音調(diào)2持續(xù)4拍3Buzzer_Freq_Set0( 328 );Delay(192*4);蜂鳴器發(fā)出音調(diào)3持續(xù)4拍4Buzzer_Freq_Set0( 347 );Delay(192*4);蜂鳴器發(fā)出音調(diào)4持續(xù)4拍5Buzzer_Freq_Set0( 390 );Delay(192*4);蜂鳴器發(fā)出音調(diào)5持續(xù)4拍6Buzzer_Freq_Set0( 438 );Delay(192*4);蜂鳴器發(fā)出音調(diào)6持續(xù)4拍7Buzzer_Freq_Set0( 490 );Delay(192*4);蜂鳴器發(fā)出音調(diào)7持續(xù)4

22、拍3. 理解蜂鳴器唱歌的過(guò)程,全速運(yùn)行程序,聆聽(tīng)蜂鳴器唱歌4. 更改唱歌的內(nèi)容,播放另外兩首歌2.4.5 實(shí)驗(yàn)思考題簡(jiǎn)述PWM技術(shù)的其他應(yīng)用例子及其原理答:通信與控制PWM的一個(gè)優(yōu)點(diǎn)是從處理器到被控系統(tǒng)信號(hào)都是數(shù)字形式的,無(wú)需進(jìn)行數(shù)模轉(zhuǎn)換。讓信號(hào)保持為數(shù)字形式可將噪聲影響降到最小。噪聲只有在強(qiáng)到足以將邏輯1改變?yōu)檫壿?或?qū)⑦壿?改變?yōu)檫壿?時(shí),也才能對(duì)數(shù)字信號(hào)產(chǎn)生影響。對(duì)噪聲抵抗能力的增強(qiáng)是PWM相對(duì)于模擬控制的另外一個(gè)優(yōu)點(diǎn),而且這也是在某些時(shí)候?qū)WM用于通信的主要原因。從模擬信號(hào)轉(zhuǎn)向PWM可以極大地延長(zhǎng)通信距離。在接收端,通過(guò)適當(dāng)?shù)腞C或LC網(wǎng)絡(luò)可以濾除調(diào)制高頻方波并將信號(hào)還原為模擬形式。

23、PWM廣泛應(yīng)用在多種系統(tǒng)中。作為一個(gè)具體的例子,我們來(lái)考察一種用PWM控制的制動(dòng)器。簡(jiǎn)單地說(shuō),制動(dòng)器是緊夾住某種東西的一種裝置。許多制動(dòng)器使用模擬輸入信號(hào)來(lái)控制夾緊壓力(或制動(dòng)功率)的大小。加在制動(dòng)器上的電壓或電流越大,制動(dòng)器產(chǎn)生的壓力就越大??梢詫WM控制器的輸出連接到電源與制動(dòng)器之間的一個(gè)開(kāi)關(guān)。要產(chǎn)生更大的制動(dòng)功率,只需通過(guò)軟件加大PWM輸出的占空比就可以了。如果要產(chǎn)生一個(gè)特定大小的制動(dòng)壓力,需要通過(guò)測(cè)量來(lái)確定占空比和壓力之間的數(shù)學(xué)關(guān)系(所得的公式或查找表經(jīng)過(guò)變換可用于控制溫度、表面磨損等等)。例如,假設(shè)要將制動(dòng)器上的壓力設(shè)定為100psi,軟件將作一次反向查找,以確定產(chǎn)生這個(gè)大小的壓力

24、的占空比應(yīng)該是多少。然后再將PWM占空比設(shè)置為這個(gè)新值,制動(dòng)器就可以相應(yīng)地進(jìn)行響應(yīng)了。如果系統(tǒng)中有一個(gè)傳感器,則可以通過(guò)閉環(huán)控制來(lái)調(diào)節(jié)占空比,直到精確產(chǎn)生所需的壓力。 總之,PWM既經(jīng)濟(jì)、節(jié)約空間、抗噪性能強(qiáng),是一種值得廣大工程師在許多設(shè)計(jì)應(yīng)用中使用的有效技術(shù)。2.5 串口實(shí)驗(yàn)2.5.1 實(shí)驗(yàn)?zāi)康氖煜RM的串口操作2.5.2 實(shí)驗(yàn)原理1)串行通信概述常用的數(shù)據(jù)通信方式有并行通信和串行通信兩種。當(dāng)兩臺(tái)數(shù)字設(shè)備之間傳輸距離較遠(yuǎn)時(shí),數(shù)據(jù)往往以串行方式傳輸。串行通信的數(shù)據(jù)是一位一位地進(jìn)行傳輸?shù)?,在傳輸中每一位?shù)據(jù)都占據(jù)一個(gè)固定的時(shí)間長(zhǎng)度。與并行通信相比,如果n位并行接口傳送n位數(shù)據(jù)需時(shí)間T,則串行傳

25、送的時(shí)間最少為nT。串行通信具有傳輸線少、成本低等優(yōu)點(diǎn),特別適合遠(yuǎn)距離傳送。(1)串行數(shù)據(jù)通信模式串行數(shù)據(jù)通信模式有單工通信、半雙工通信和全雙工通信3種基本的通信模式。u 單工通信:數(shù)據(jù)僅能從設(shè)備A到設(shè)備B進(jìn)行單一方向的傳輸。u 半雙工通信:數(shù)據(jù)可以從設(shè)備A到設(shè)備B進(jìn)行傳輸,也可以從設(shè)備B到設(shè)備A進(jìn)行傳輸,但不能在同一時(shí)刻進(jìn)行雙向傳輸。u 全雙工通信:數(shù)據(jù)可以在同一時(shí)刻從設(shè)備A傳輸?shù)皆O(shè)備B,或從設(shè)備B傳輸?shù)皆O(shè)備A,即可以同時(shí)雙向傳輸(2)串行通信方式串行通信在信息格式的約定上可以分為同步通信和異步通信兩種方式。A. 異步通信方式異步通信時(shí)數(shù)據(jù)是一幀一幀傳送的,每幀數(shù)據(jù)包含有起始位(”0”)、數(shù)

26、據(jù)位、奇偶校驗(yàn)位和停止位(”1”),每幀數(shù)據(jù)的傳送靠起始位來(lái)同步。一幀數(shù)據(jù)的各位代碼間的時(shí)間間隔是固定的,而相鄰兩幀的數(shù)據(jù)其時(shí)間間隔是不固定的。在異步通信的數(shù)據(jù)傳送中,傳輸線上允許空字符。異步通信對(duì)字符的格式、波特率、校驗(yàn)位有確定的要求。u 字符的格式每個(gè)字符傳送時(shí),必須前面加一起始位,后面加上1、1.5或2位停止位。例如ASCII碼傳送時(shí),一幀數(shù)據(jù)的組成是:前面1個(gè)起始位,接著7位ASCII編碼,再接著一位奇偶校驗(yàn)位,最后一位停止位,共10位。u 波特率傳送數(shù)據(jù)位的速率稱(chēng)為波特率,用位秒(bit/s)來(lái)表示,稱(chēng)之為波特。例如,數(shù)據(jù)傳送的速率為120字符秒,每幀包括10個(gè)數(shù)據(jù)位,則傳送波特率為

27、:10×120=1200b/s=1200波特每一位的傳送時(shí)間是波特的倒數(shù),如1/1200=0.833ms。異步通信的波特率的數(shù)值通常為:150、300、600、1200、2400、4800、9600、14400、28800、115200等,數(shù)值成倍數(shù)變化。u 校驗(yàn)位在一個(gè)有8位的字節(jié)(byte)中,其中必有奇數(shù)個(gè)或偶數(shù)個(gè)的“1”狀態(tài)位。對(duì)于偶校驗(yàn)就是要使字符加上校驗(yàn)位有偶數(shù)個(gè)“1”;奇校驗(yàn)就是要使字符加上校驗(yàn)位有奇數(shù)個(gè)“1”。例如數(shù)據(jù)“00010011”,共有奇數(shù)個(gè)“1”,所以當(dāng)接收器要接收偶數(shù)個(gè)“1”時(shí)(即偶校驗(yàn)時(shí)),則校驗(yàn)位就置為“1”,反之,接收器要接收奇數(shù)個(gè)“1”時(shí)(即奇校驗(yàn)

28、時(shí)),則校驗(yàn)位就置為“0”。一般校驗(yàn)位的產(chǎn)生和檢查是由串行通信控制器內(nèi)部自動(dòng)產(chǎn)生,除了加上校驗(yàn)位以外,通信控制器還自動(dòng)加上停止位,用來(lái)指明欲傳送字符的結(jié)束。停止位通常取1、1.5或2個(gè)位。對(duì)接收器而言,若未能檢測(cè)到停止位則意味著傳送過(guò)程發(fā)生了錯(cuò)誤。在異步通信方式中,在發(fā)送的數(shù)據(jù)中含有起始位和停止位這兩個(gè)與實(shí)際需要傳送的數(shù)據(jù)毫無(wú)相關(guān)的位。如果在傳送1個(gè)8位的字符時(shí),其校驗(yàn)位、起始位和停止位都為1個(gè)位,則相當(dāng)于要傳送11個(gè)位信號(hào),傳送效率只有約80%。B. 同步通信方式為了提高通信效率可以采用同步通信方式。同步傳輸采用字符塊的方式,減少每一個(gè)字符的控制和錯(cuò)誤檢測(cè)數(shù)據(jù)位,因而可以具有較高的傳輸速率與

29、異步方式不同的是,同步通信方式不僅在字符的本身之間是同步的,而且在字符與字符之間的時(shí)序仍然是同步的,即同步方式是將許多的字符聚集成一字符塊后,在每塊信息(常常稱(chēng)之為信息幀)之前要加上12個(gè)同步字符,字符塊之后再加入適當(dāng)?shù)腻e(cuò)誤檢測(cè)數(shù)據(jù)才傳送出去。在同步通信時(shí)必須連續(xù)傳輸,不允許有間隙,在傳輸線上沒(méi)有字符傳輸時(shí),要發(fā)送專(zhuān)用的”空閑”字符或同步字符。2)RS-232C串行接口(1)RS-232C接口規(guī)格EIA所制定的傳送電氣規(guī)格如表2-1所示。RS-232C通常以±12V的電壓來(lái)驅(qū)動(dòng)信號(hào)線,TTL標(biāo)準(zhǔn)與RS-232C標(biāo)準(zhǔn)之間的電平轉(zhuǎn)換電路通常采用集成電路芯片實(shí)現(xiàn),如MAX232等(2)RS

30、-232C接口信號(hào)EIA制定的RS-232C接口與外界的相連采用25芯(DB-25)和9芯(DB-9)D型插接件,實(shí)際應(yīng)用中,并不是每只引腳信號(hào)都必須用到,25芯和9芯D型插接件引腳的定義,與信號(hào)之間的對(duì)應(yīng)關(guān)系如圖(3)RS-232C的基本連接方式計(jì)算機(jī)利用RS-232C接口進(jìn)行串口通信,有簡(jiǎn)單連接和完全連接兩種連接方式。簡(jiǎn)單連接又稱(chēng)三線連接,即只連接發(fā)送數(shù)據(jù)線、接收數(shù)據(jù)線和信號(hào)地,如圖2-12所示。如果應(yīng)用中還需要使用RS-232C的控制信號(hào),則采用完全連接方式,如圖2-13所示。在波特率不高于9600bps的情況下進(jìn)行串口通信時(shí),通信線路的長(zhǎng)度通常要求小于15米,否則可能出現(xiàn)數(shù)據(jù)丟失現(xiàn)象3

31、)S3C2440A的UART簡(jiǎn)介UART(Universal Asynchronous Receiver and Transmitter,通用異步收發(fā)器)主要由數(shù)據(jù)線接口、控制邏輯、配置寄存器、波特率發(fā)生器、發(fā)送部分和接收部分組成,采用異步串行通信方式,采用RS-232C 9芯接插件(DB-9)連接,是廣泛使用的串行數(shù)據(jù)傳輸方式,UART以字符為單位進(jìn)行數(shù)據(jù)傳輸,每個(gè)字符的傳輸格式如圖2-14所示,包括線路空閑狀態(tài)(高電平)、起始位(低電平)、58位數(shù)據(jù)位、校驗(yàn)位(可選)和停止位(位數(shù)可以是1、1.5或2位)。這種格式通過(guò)起始位和停止位來(lái)實(shí)現(xiàn)字符的同步。UART內(nèi)部一般具有配置寄存器,通過(guò)該寄

32、存器可以配置數(shù)據(jù)位數(shù)(58位)、是否有校驗(yàn)位和校驗(yàn)的類(lèi)型以及停止位的位數(shù)(1位、1.5位或2位)等4)S3C2410A的UART結(jié)構(gòu)S3C2410A的UART提供3個(gè)獨(dú)立的異步串行I/O口(SIO),它們都可以運(yùn)行于中斷模式或DMA模式。UART可以產(chǎn)生中斷請(qǐng)求或DMA請(qǐng)求,以便在CPU和UART之間傳輸數(shù)據(jù)。在使用系統(tǒng)時(shí)鐘的情況下,UART可以支持最高230.4Kbps的傳輸速率。如果外部設(shè)備通過(guò)UEXTCLK為UART提供時(shí)鐘,那么UART的傳輸速率可以更高。每個(gè)UART通道包含兩個(gè)用于接收和發(fā)送數(shù)據(jù)的16字節(jié)的FIFO緩沖寄存器如圖2-15所示,S3C2410A的UART由波特率發(fā)生器、

33、發(fā)送器、接收器以及控制單元組成。波特率發(fā)生器的時(shí)鐘可以由PCLK或UEXTCLK提供。發(fā)送器和接收器包含16字節(jié)的FIFO緩沖寄存器和數(shù)據(jù)移位器。發(fā)送時(shí),數(shù)據(jù)被寫(xiě)入FIFO,然后拷貝到發(fā)送移位器中,接下來(lái)數(shù)據(jù)通過(guò)發(fā)送數(shù)據(jù)引腳(TxDn)被發(fā)送。接收時(shí),接收到的數(shù)據(jù)從接收數(shù)據(jù)引腳(RxDn)移入,然后從移位器拷貝到FIFO中2.5.3 實(shí)驗(yàn)儀器與設(shè)備1. TQ2440實(shí)驗(yàn)平臺(tái)2. J-LINK 調(diào)試器2.5.4 實(shí)驗(yàn)步驟1. 打開(kāi)實(shí)驗(yàn)代碼文件夾中的uart_test子文件夾中的工程uart_test.mcp工程2. 閱讀代碼,單步執(zhí)行,體會(huì)Uart0_SendByte和Uart0_Getch()

34、函數(shù)里面對(duì)相關(guān)寄存器的設(shè)置方法和意義,實(shí)現(xiàn)基本的串口收發(fā)功能,并且修改收發(fā)的數(shù)據(jù),把對(duì)應(yīng)的程序和現(xiàn)象記錄下來(lái)序號(hào)程序現(xiàn)象1Uart0_Init( 115200 );Uart0_SendByte('A');串口調(diào)試助手顯示字母A2ch=Uart0_Getch();Uart0_SendByte(ch);在串口調(diào)試助手輸入任意字符串口調(diào)試助手將再次顯示該字符4.修改程序,實(shí)現(xiàn)一個(gè)字符串的發(fā)送功能,把程序和現(xiàn)象記錄下來(lái) 序號(hào)程序現(xiàn)象1void UART0_SendString(char *pWord)while(*pWord)if(*pWord = 'n')UART0_

35、SendChar('n'); /換行UART0_SendChar('r');elseUART0_SendChar(*pWord);pWord+;串口發(fā)送字符串函數(shù)定義2UART0_SendString(“Hello,world!n”)串口調(diào)試助手顯示字符串“Hello,world!”并換行5. 修改代碼,實(shí)現(xiàn) PC 通過(guò)串口控制 LED 的功能,把程序和現(xiàn)象記錄下來(lái)序號(hào)程序現(xiàn)象1switch(ch)case '1': LED_Control(1,ON); break;case '2': LED_Control(2,ON); bre

36、ak;case '3': LED_Control(3,ON); break;case '4': LED_Control(4,ON); break;default: LED_Control(1,OFF); LED_Control(2,OFF); LED_Control(3,OFF); LED_Control(4,OFF);break;字符判斷并控制對(duì)應(yīng)LED燈點(diǎn)亮2ch=Uart0_Getch();在串口調(diào)試助手中輸入字符1、2、3、4對(duì)應(yīng)LED點(diǎn)亮2.5.4 實(shí)驗(yàn)思考題如何采用帶FIFO的串口進(jìn)行數(shù)據(jù)收發(fā)答:在接受數(shù)據(jù)的時(shí)候放入FIFO中,然后發(fā)送數(shù)據(jù),把FIF

37、O中的數(shù)據(jù)通過(guò)串口發(fā)送出去。在串口助手里很容易看出來(lái),數(shù)據(jù)是不是錯(cuò)誤或者丟失。驗(yàn)證了發(fā)送與接收。2.6 實(shí)時(shí)時(shí)鐘實(shí)驗(yàn)2.6.1 實(shí)驗(yàn)?zāi)康氖煜RM的實(shí)時(shí)時(shí)鐘的讀寫(xiě)2.6.2 實(shí)驗(yàn)原理實(shí)時(shí)時(shí)鐘(RTC)單元在系統(tǒng)電源關(guān)閉的情況下可以在備用電池下工作。S3C2440A的RTC模塊的結(jié)構(gòu)如圖2-18所示,其能夠以BCD碼的形式提供秒、分鐘、小時(shí)、星期、日、月、年的信息,具有閏年生成器,具有報(bào)警功能,解決2000年問(wèn)題,具有獨(dú)立電源引腳(RTCVDD),支持對(duì)于實(shí)時(shí)內(nèi)核時(shí)間節(jié)拍的毫秒節(jié)拍時(shí)間中斷。與RTC相關(guān)的寄存器有:u實(shí)時(shí)時(shí)鐘控制寄存器(RTCCON)在讀取或者修改時(shí)間前,必須先把該寄存器的第 0

38、 位 RTCEN 置 1,該寄存器的位如下所示 u年寄存器 u月寄存器 u日寄存器 u時(shí)寄存器 u分寄存器 u秒寄存器2.6.3實(shí)驗(yàn)設(shè)備1. TQ2440實(shí)驗(yàn)平臺(tái)2. J-LINK 調(diào)試器3. 串口線2.6.4 實(shí)驗(yàn)步驟1. 打開(kāi)實(shí)驗(yàn)代碼文件夾中的rtc_test子文件夾中的工程rtc_test.mcp工程2. 閱讀代碼,單步執(zhí)行,體會(huì)void RTC_Time_Set( void )和void RTC_Display(void)函數(shù)里面對(duì)相關(guān)秒寄存器的寫(xiě)入和讀取過(guò)程,通過(guò)串口觀察到的結(jié)果。3. 增加對(duì)年、月、日、時(shí)、分寄存器的寫(xiě)入和讀取功能,并通過(guò)串口觀察修改后的時(shí)間。把代碼和相應(yīng)的現(xiàn)象寫(xiě)入

39、下表序號(hào)程序現(xiàn)象1void RTC_Time_Set( void )rRTCCON = 1 ;rBCDYEAR = 0x14 ;/年 閏年測(cè)試rBCDMON = 0x12 ;/月rBCDDATE = 0x26 ;/日rBCDDAY = 0x04 ;/星期rBCDHOUR = 0x14 ;/小時(shí)rBCDMIN = 0x49 ;/分rBCDSEC = 0x50 ;/秒rRTCCON &= 1 ;RTC起始時(shí)間設(shè)置位“2014年12月26日星期四14時(shí)49分50秒”2void RTC_Display(void) U16 year ;U8 month, day ;/ weekU8 hour,

40、minute, second ;rRTCCON = 1 ;year = 0x2000+rBCDYEAR ;/年month = rBCDMON ; /月day = rBCDDATE ;/日hour = rBCDHOUR ;/小時(shí)minute = rBCDMIN ;/分second = rBCDSEC ;/秒rRTCCON &= 1 ;/RTC read and write disableUart_Printf("RTCtime : %04x-%02x-%02x %02x:%02x:%02xn", year, month, day, hour, minute, seco

41、nd );Delay( 900 ) ;讀取RTC當(dāng)前時(shí)間在通過(guò)串口在串口調(diào)試助手中顯示4.修改工程,改變時(shí)間設(shè)置值,嘗試設(shè)置閏年和非閏年,觀察實(shí)驗(yàn)結(jié)果,把把代碼和相應(yīng) 的現(xiàn)象寫(xiě)入下表序號(hào)程序現(xiàn)象1RTC_Time_Set();/設(shè)置時(shí)間為2014年2月28日星期一23:59:57while(1)RTC_Display();RTC初始時(shí)間為時(shí)間為2014年2月28日星期一23:59:57;串口每秒顯示一次當(dāng)前時(shí)間4秒后當(dāng)前時(shí)間為2014年2月29日星期二00:00:00;2RTC_Time_Set();/設(shè)置時(shí)間為2013年2月28日星期一23:59:57while(1)RTC_Display(

42、);RTC初始時(shí)間為時(shí)間為2013年2月28日星期一23:59:57;串口每秒顯示一次當(dāng)前時(shí)間4秒后當(dāng)前時(shí)間為2013年3月1日星期二00:00:00;2.7 看門(mén)狗實(shí)驗(yàn)2.7.1 實(shí)驗(yàn)?zāi)康氖煜RM的看門(mén)狗的操作2.7.2 實(shí)驗(yàn)原理在程序運(yùn)行過(guò)程中中,由于軟件問(wèn)題或者外界的干擾,造成程序跑飛,而陷入死循環(huán),程序的正常運(yùn)行被打斷,由于系統(tǒng)無(wú)法繼續(xù)工作,會(huì)造成整個(gè)系統(tǒng)的陷入停滯狀態(tài),發(fā)生不可預(yù)料的后果,所以出于對(duì)程序運(yùn)行狀態(tài)進(jìn)行實(shí)時(shí)監(jiān)測(cè)的考慮,便產(chǎn)生了一種專(zhuān)門(mén)用于監(jiān)測(cè)單片機(jī)程序運(yùn)行狀態(tài)的芯片,俗稱(chēng)“看門(mén)狗”(watchdog)。S3C2440A的看門(mén)狗的結(jié)構(gòu)如圖2-19所示,看門(mén)狗實(shí)際是一個(gè)計(jì)數(shù)

43、器,當(dāng)計(jì)數(shù)溢出的時(shí)候可以對(duì)系統(tǒng)進(jìn)行復(fù)位,因此程序在正常運(yùn)行的時(shí)候應(yīng)該隔一段時(shí)間對(duì)看門(mén)狗復(fù)位,防止看門(mén)狗計(jì)數(shù)器溢出使得系統(tǒng)復(fù)位,這個(gè)過(guò)程叫做“喂狗”。S3C2440A中與看門(mén)狗相關(guān)的寄存器有:u 看門(mén)狗控制寄存器(WTCON)看門(mén)狗控制寄存器如下表所示,其用于啟動(dòng)和關(guān)閉看門(mén)狗。u 看門(mén)狗計(jì)數(shù)器(WTCNT)程序中需要在器溢出之前把新的計(jì)數(shù)值賦給看門(mén)狗計(jì)數(shù)器2.7.5 實(shí)驗(yàn)儀器與設(shè)備1. TQ2440實(shí)驗(yàn)平臺(tái)2. J-LINK 調(diào)試器3.串口線2.7.6 實(shí)驗(yàn)步驟1. 打開(kāi)實(shí)驗(yàn)代碼文件夾中的wd_test子文件夾中的工程wd_test.mcp工程2. 閱讀代碼,了解看門(mén)狗的啟動(dòng)方式和喂狗的方法3.

44、 修改工程,比較有喂狗和沒(méi)有喂狗的實(shí)驗(yàn)結(jié)果,把程序和相應(yīng)的現(xiàn)象列入下表中。注意:要觀察看門(mén)狗的復(fù)位,必須全速運(yùn)行程序,不能單步執(zhí)行序號(hào)程序現(xiàn)象1for(i=5;i<=8;i+)led_con(i,ON);delay(1);led_con(i,OFF);delay(1);程序運(yùn)行大約2s后停止運(yùn)行并且AXD顯示:“Processor ARM79_0 raised an exception ;cause:The processor was reset”2for(i=5;i<=8;i+)led_con(i,ON);/rWTCNT=2000; /喂狗delay(1);led_con(i,O

45、FF);/rWTCNT=2000; /喂狗delay(1);程序正常運(yùn)行,4個(gè)LED循環(huán)依次亮滅第三章 C/OS II操作系統(tǒng)下的實(shí)驗(yàn)3.2 C/OS II多任務(wù)建立實(shí)驗(yàn)3.2.1 實(shí)驗(yàn)?zāi)康氖煜?C/OS II 多任務(wù)建立方法3.2.2 實(shí)驗(yàn)內(nèi)容1. 運(yùn)行 C/OS II 例程,熟悉任務(wù)的建立方法2. 修改例程代碼,建立兩個(gè)任務(wù),其中一個(gè)實(shí)現(xiàn)蜂鳴器唱歌,另外一個(gè)實(shí)現(xiàn)按鍵的檢測(cè)并且改變相應(yīng)的 LED 的狀態(tài)3.2.3 實(shí)驗(yàn)原理人們?cè)趯?shí)際生活中處理一個(gè)大而復(fù)雜問(wèn)題, 時(shí)慣用的方法就是 “分而治之” 即把一個(gè)大問(wèn)題分解多個(gè)相對(duì)簡(jiǎn)單、比較容易解決的小問(wèn)題,小問(wèn)題逐個(gè)被解決了,大問(wèn)題也就隨之解決了。同樣

46、,在設(shè)計(jì)一個(gè)較為復(fù)雜的應(yīng)用程序時(shí),也通常把一個(gè)大型任務(wù)分解成多個(gè)小任務(wù),然后在計(jì)算機(jī)中通過(guò)運(yùn)行這些小任務(wù),最終達(dá)到完成大任務(wù)的目的,這種做法也使用應(yīng)用程序的維護(hù)變得方便起來(lái)。因此,現(xiàn)代操作系統(tǒng)幾乎都是對(duì)任務(wù)操作系統(tǒng)。 在C/OS-II 中,與上述小任務(wù)對(duì)應(yīng)的是程序?qū)嶓w就叫做“任務(wù)”(實(shí)質(zhì)是一個(gè)線程)。C/OS-II 就是一個(gè)能對(duì)這些小任務(wù)進(jìn)行管理和調(diào)度的多任務(wù)操作系統(tǒng)。 從應(yīng)用程序設(shè)計(jì)的角度來(lái)看,C/OS-II 的任務(wù)就是一個(gè)線程,就是一個(gè)用來(lái)解決用戶問(wèn)題的 C 語(yǔ)言函數(shù)和與之相關(guān)聯(lián)的一些數(shù)據(jù)結(jié)構(gòu)而構(gòu)成的一個(gè)實(shí)體。 C/OS-II 的任務(wù)有兩種:用戶任務(wù)和系統(tǒng)任務(wù)。有應(yīng)用程序設(shè)計(jì)者編寫(xiě)得任務(wù),

47、叫做用戶任務(wù);有系統(tǒng)提供的任務(wù)叫做系統(tǒng)任務(wù)。用戶任務(wù)是為解決應(yīng)用問(wèn)題而編寫(xiě)的;系統(tǒng)任務(wù)是為應(yīng)用程序來(lái)提供某種服務(wù)的。 為了管理上的方便,C/OS-II 把每一個(gè)任務(wù)都作為一個(gè)節(jié)點(diǎn)。 目前,C/OS-II 最多可以對(duì) 64 個(gè)任務(wù)(包括用戶任務(wù)和系統(tǒng)任務(wù))進(jìn)行管理。1) 任務(wù)的狀態(tài) 因?yàn)樵谇度胧较到y(tǒng)中只有一個(gè) CPU,所以在一個(gè)具體時(shí)刻只能允許一個(gè)任務(wù)占用 CPU。 根據(jù)任務(wù)是否占用 CPU,以及是否處于被中斷、等待等情況。任務(wù)在C/OS-II 中可能處于表3-1 所列的 5 種狀態(tài)之一。任務(wù)的狀態(tài) 說(shuō)明睡眠狀態(tài) 任務(wù)只是以代碼的形式駐留在程序空間(ROM 和 RAM)中,還沒(méi)有交給操作 系統(tǒng)管

48、理時(shí)的情況叫睡眠狀態(tài)。簡(jiǎn)單地說(shuō),任務(wù)在沒(méi)有被配備任務(wù)控制塊 或被剝奪了任務(wù)控制塊時(shí)的狀態(tài)叫做任務(wù)的睡眠狀態(tài)就緒狀態(tài) 如果系統(tǒng)為任務(wù)配備了任務(wù)控制塊且在任務(wù)就緒表中進(jìn)行了就緒登記,則 任務(wù)就具備了運(yùn)行的充分條件,這時(shí)任務(wù)的狀態(tài)叫就緒狀態(tài)運(yùn)行狀態(tài) 處于就緒狀態(tài)的任務(wù),如果經(jīng)調(diào)度器獲得了 CPU 的使用權(quán),則任務(wù)進(jìn)入運(yùn) 行狀態(tài),任何時(shí)刻只能有一個(gè)任務(wù)進(jìn)入運(yùn)行狀態(tài),就緒的任務(wù)只有當(dāng)所有 優(yōu)先級(jí)高于本任務(wù)的任務(wù)都轉(zhuǎn)為等待狀態(tài)時(shí),才能進(jìn)入運(yùn)行狀態(tài)等待狀態(tài) 正在運(yùn)行的任務(wù), 需要等待一段時(shí)間或者需要等待一個(gè)事件發(fā)生再運(yùn)行時(shí), 該任務(wù)就會(huì)把 CPU 的使用權(quán)讓給其他任務(wù)而使任務(wù)進(jìn)入等待狀態(tài)中斷服務(wù)狀態(tài) 一個(gè)正

49、在運(yùn)行的任務(wù)一旦響應(yīng)中斷申請(qǐng)就會(huì)中止運(yùn)行而去執(zhí)行中斷服務(wù)程 序,這時(shí)任務(wù)的狀態(tài)叫做中斷服務(wù)狀態(tài)任務(wù)在不同狀態(tài)之間的轉(zhuǎn)換如圖 3-1 所示2) 用戶任務(wù)代碼的一般結(jié)構(gòu)用戶任務(wù)代碼的一般結(jié)構(gòu)根據(jù)嵌入式任務(wù)的工作特點(diǎn),任務(wù)的執(zhí)行代碼通常是一個(gè)無(wú)限循環(huán)結(jié)構(gòu),并且在這個(gè)循環(huán)中可以響應(yīng)中斷,這種結(jié)構(gòu)叫做超循環(huán)結(jié)構(gòu)。一個(gè)用 C 語(yǔ)言編寫(xiě)的任務(wù)Void MyTask(void* pdata)for(;)可以被中斷的代碼;OS_ENTER_CRITICAL();/進(jìn)入臨界段(關(guān)中斷)不可以被中斷的用戶代碼;OS_EXIT_CRITICAL();/退出臨界段(開(kāi)中斷)可以被中斷的用戶代碼;從程序設(shè)計(jì)的角度來(lái)看,一

50、個(gè)C/OS-II 任務(wù)的代碼就是一個(gè) C 語(yǔ)言函數(shù)。為了可以傳遞各種類(lèi)型的數(shù)據(jù)甚至是函數(shù),任務(wù)的參數(shù)是一個(gè) void 類(lèi)型的指針。為 了 有 效 地 對(duì) 中 斷 進(jìn) 行 控 制 , 在 任 務(wù) 的 代 碼 里 可 以 使 用 C/OS-II 定義的宏OS_ENTER_CRITICAL()和 OS_EXIT_CRITICAL()來(lái)控制任務(wù)何時(shí)響應(yīng)中斷,何時(shí)屏蔽中斷。在運(yùn)行這兩個(gè)宏之間的代碼時(shí)是不會(huì)響應(yīng)中斷的,這種保護(hù)的代碼段叫做臨界段。在具體應(yīng)用中可以,根據(jù)實(shí)際需要在一個(gè)任務(wù)中使用這對(duì)宏設(shè)置對(duì)個(gè)臨界段。因此可以說(shuō),C/OS-II 任務(wù)是代碼結(jié)構(gòu)的一個(gè)帶有臨界段的無(wú)限循環(huán)。用戶應(yīng)用程序的一般結(jié)構(gòu)從

51、程序代碼上來(lái)看,用戶任務(wù)似乎就是一個(gè) C 語(yǔ)言函數(shù),但是這個(gè)函數(shù)不是一般的 C語(yǔ)言函數(shù),它是一個(gè)任務(wù)(線程)。因此它不是被主函數(shù)或其他函數(shù)調(diào)用的,主函數(shù) main()只負(fù)責(zé)創(chuàng)建和啟動(dòng)它們,而由操作系統(tǒng)負(fù)責(zé)來(lái)調(diào)度運(yùn)行它們。用戶應(yīng)用程序結(jié)構(gòu)Void MyTask1(void* pdata) /定義用戶任務(wù) 1for(;).Void MyTask2(void* pdata) /定義用戶任務(wù) 2for(;).Void MyTask3(void* pdata) /定義用戶任務(wù) 3for(;).void main().OSIniT(); /初始化C/OS-II.OSTaskCreat(MyT ask1,.

52、); /創(chuàng)建用戶任務(wù) 1OSTaskCreat(MyTask2,.); /創(chuàng)建用戶任務(wù) 2OSTaskCreat(MyTask3,.); /創(chuàng)建用戶任務(wù) 3.OSStart(); /啟動(dòng)任務(wù).3) 系統(tǒng)任務(wù) C/OS-II 預(yù)定義了兩個(gè)應(yīng)用程序服務(wù)的系統(tǒng)任務(wù):空閑任務(wù)和統(tǒng)計(jì)任務(wù)。其中空閑任務(wù)是每個(gè)應(yīng)用程序必須使用的,而統(tǒng)計(jì)任務(wù)則是應(yīng)用程序可以根據(jù)實(shí)際需要來(lái)選擇使用的。(1) 空閑任務(wù) 在多任務(wù)系統(tǒng)運(yùn)行時(shí),系統(tǒng)經(jīng)常會(huì)在某個(gè)時(shí)間內(nèi)無(wú)用戶任務(wù)可以運(yùn)行而處于所謂的空閑狀態(tài)。為了使 CPU 在沒(méi)有使用用戶任務(wù)可執(zhí)行時(shí)有事可做,C/OS-II 提高了一個(gè)叫做空閑任務(wù) OSTaskIdle()的系統(tǒng)任務(wù)???/p>

53、閑任務(wù)代碼如下Void OSTaskIdle(void* pdata) # if OS_CRITICAL_METHOD =3OS_CPU_SR cpu_sr;# endifpdata=pdata; /防止某些編譯器報(bào)錯(cuò)for(;)OS_ENTER_CRITICAL(); /關(guān)閉中斷OSdleCtr+; /計(jì)數(shù)OS_EXIT_CRITICAL(); /開(kāi)放中斷C/OS-II 規(guī)定,一個(gè)用戶應(yīng)用程序必須使用這個(gè)空閑任務(wù),而且這個(gè)任務(wù)是不能用軟件來(lái)刪除的(2) .統(tǒng)計(jì)任務(wù) C/OS-II 提供的另一個(gè)系統(tǒng)任務(wù)是統(tǒng)計(jì)任務(wù) OSTaskStart()。這個(gè)統(tǒng)計(jì)任務(wù)每秒計(jì)算一次CPU 在單位時(shí)間內(nèi)被使用的時(shí)間,并把計(jì)算結(jié)果以百分比的形式存放在變量 OSCPUUsage 中,以便應(yīng)用程序通過(guò)訪問(wèn)它來(lái)了解 CPU 的利用率,所以該系統(tǒng)任務(wù) OSTaskStart()叫做統(tǒng)計(jì)任務(wù)。 用戶應(yīng)用程序是否使用統(tǒng)計(jì)任務(wù),用戶可以根據(jù)應(yīng)用程序的實(shí)際需要來(lái)進(jìn)行選擇。如果用戶應(yīng)用程序要使用這個(gè)統(tǒng)計(jì)任務(wù),則必須把定義的體貼頭文件 OS-CFG.H 中的系統(tǒng)配置常數(shù) OS_

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論