第七章 uSOSII及應(yīng)用開發(fā)_第1頁
第七章 uSOSII及應(yīng)用開發(fā)_第2頁
第七章 uSOSII及應(yīng)用開發(fā)_第3頁
第七章 uSOSII及應(yīng)用開發(fā)_第4頁
第七章 uSOSII及應(yīng)用開發(fā)_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、.1C/OS-C/OS-介紹介紹.2C/OS-C/OS-在在S3C44B0XS3C44B0X上的移植上的移植第七章第七章 uC/OS-IIuC/OS-II及應(yīng)用開發(fā)及應(yīng)用開發(fā)27.1.1C/OS-介紹v簡介簡介 v C/OS-C/OS-的特點(diǎn)的特點(diǎn) v C/OS-C/OS-的內(nèi)核的內(nèi)核 v C/OS-C/OS-的文件體系的文件體系 主要內(nèi)容3一、C/OS-簡介C/OS-讀作“micro controller OS 2”,意為“微控制器操作系統(tǒng)版本2”。特點(diǎn)之一是:結(jié)構(gòu)小巧。包含全部功能的核心部分代碼只占用8.3K字節(jié),同時由于C/OS-是可裁剪的,所以用戶系統(tǒng)

2、中實際的代碼最少可達(dá)2.7K字節(jié)。4一、C/OS-簡介特點(diǎn)之二:是一個真正的實時操作系統(tǒng)。實時操作系統(tǒng)一般定義為“一個能夠在指定的或者確定的時間內(nèi),完成系統(tǒng)功能和對外部或內(nèi)部、同步或異步事件做出響應(yīng)的系統(tǒng)”。實時操作系統(tǒng)在實現(xiàn)時通常采用的是基于優(yōu)先級的任務(wù)調(diào)度策略。也就是說系統(tǒng)根據(jù)各個任務(wù)的優(yōu)先級,動態(tài)地切換各個任務(wù),來保證實時性。通常基于優(yōu)先級的操作系統(tǒng)有兩種:可剝奪型的和不可剝奪型的。只有基于優(yōu)先級的可剝奪型的操作系統(tǒng)才是真正的實時操作系統(tǒng)。5在可剝奪型內(nèi)核中,當(dāng)有更高優(yōu)先級的任務(wù)就緒時,總能得到CPU的控制權(quán)。也就是說可剝奪型內(nèi)核總是讓就緒態(tài)的高優(yōu)先級的任務(wù)先運(yùn)行。C/OS-以及絕大多數(shù)

3、商業(yè)實時內(nèi)核都是可剝奪型內(nèi)核。一、C/OS-簡介6 特點(diǎn)之三是:C/OS-實際上是一個實時操作系統(tǒng)內(nèi)核,只包含了任務(wù)調(diào)度、任務(wù)管理、時間管理、內(nèi)存管理和任務(wù)間的通信與同步等基本功能。沒有提供輸入輸出管理、文件系統(tǒng)、網(wǎng)絡(luò)之類的額外服務(wù)。但是由于C/OS-的可移植性和開源性,用戶可以自己添加所需的各種服務(wù)。目前,已經(jīng)出現(xiàn)了專門為C/OS-開發(fā)文件系統(tǒng)、TCP/IP協(xié)議棧、用戶顯示接口等的第三方商家。7二、C/OS-的特點(diǎn) 1. 有源代碼 C/OS-源代碼是開放的,用戶可以登陸C/OS-的網(wǎng)站(www.ucos-)下載針對不同微處理器的移植代碼。如Intel公司的80 x86、8051、80196等

4、,另外,同時,嵌入式實時操作系統(tǒng)嵌入式實時操作系統(tǒng)C/OS-一書的附帶光盤中有C/OS- V2.52版本的所有源代碼。該源代碼清晰易懂,且結(jié)構(gòu)協(xié)調(diào)。作為C/OS-的最初發(fā)布者,本書的作者Jean J.Labrosse還介紹了這些代碼的工作原理以及這一段的代碼是如何拼在一起的。這是一本學(xué)習(xí)C/OS-的不錯的參考書。8二、C/OS-的特點(diǎn) 2. 可移植性(portable)C/OS-的源代碼中,除了與微處理器硬件相關(guān)的部分是使用匯編語言編寫的,其絕大部分是使用移植性很強(qiáng)的ANSI C編寫的。9二、C/OS-的特點(diǎn)3. 可固化(ROMable) C/OS-是為嵌入式應(yīng)用而設(shè)計的操作系統(tǒng),只要具備合適

5、的軟硬件工具,就可以將C/OS-嵌入到產(chǎn)品中成為產(chǎn)品的一部分。10 4. 可剪裁(scalable) 用戶可根據(jù)應(yīng)用的需要來剪裁系統(tǒng)功能。最小內(nèi)核可編譯至2k(這樣的內(nèi)核沒有太大實用性)。 5. 可剝奪型(preemptive) C/OS-是完全可剝奪型的實時內(nèi)核。它總是運(yùn)行就緒條件下優(yōu)先級最高的任務(wù)。二、C/OS-的特點(diǎn)116. 多任務(wù) C/OS-可以管理64個任務(wù),在目前的版本中,系統(tǒng)保留了最高的4個優(yōu)先級和最低的4優(yōu)先級任務(wù),所以用戶實際上最多可以擁有56個任務(wù)。注意:系統(tǒng)賦給每個任務(wù)的優(yōu)先級必須不同。7. 任務(wù)棧 C/OS-的每個任務(wù)都有自己單獨(dú)的棧和??臻g。 二、C/OS-的特點(diǎn)12

6、 8. 系統(tǒng)服務(wù) C/OS-提供了很多系統(tǒng)服務(wù),例如信號量、互斥信號量、消息郵箱、事件標(biāo)志、數(shù)據(jù)隊列、內(nèi)存塊的申請與釋放及時間管理函數(shù)等。二、C/OS-的特點(diǎn)139. 中斷管理 中斷可以使正在執(zhí)行的任務(wù)暫時掛起。如果優(yōu)先級更高的任務(wù)被中斷喚醒,則高優(yōu)先級的任務(wù)在中斷嵌套全部退出后立即執(zhí)行。中斷嵌套層數(shù)可達(dá)255層。10. 穩(wěn)定性與可靠性C/OSII自1992年以來已經(jīng)有數(shù)千個商業(yè)應(yīng)用,可以說C/OS-的每一種功能、每一個函數(shù)及每一行代碼都已經(jīng)經(jīng)過了考驗與測試。二、C/OS-的特點(diǎn)14何時使用實時操作系統(tǒng)何時使用實時操作系統(tǒng) 完全取決于軟件的復(fù)雜程度完全取決于軟件的復(fù)雜程度 嵌入式實時多任務(wù)操作

7、系統(tǒng)的主要特征:一個是多任務(wù),二是實時,三是基于優(yōu)先級控制,所以用戶需不需要使用實時多任務(wù)操作系統(tǒng),也主要是考慮對這三個方面的需求。 如果一個軟件項目并行的功能模塊比較多,定時處理的功能比較多,程序的執(zhí)行需要判斷很多條件參數(shù)和資源,這時候我們可以考慮利用RTOS的多任務(wù)能力 同樣,如果我們經(jīng)常需要考慮某些代碼之間執(zhí)行的優(yōu)先順序,那么可以利用RTOS的基于優(yōu)先級的控制能力15三、C/OS-的內(nèi)核 C/OS-其實只有一個內(nèi)核,提供任務(wù)管理、內(nèi)存管理、時間管理和任務(wù)間的通信與同步等基本功能。雖然目前已經(jīng)出現(xiàn)針對C/OS-應(yīng)用的第三方軟件如網(wǎng)絡(luò)管理、輸入輸出管理、TCP/IP協(xié)議棧等。但這些功能的實現(xiàn)

8、都是基于C/OS-的內(nèi)核管理功能實現(xiàn)的。16三、C/OS-的內(nèi)核1 1、任務(wù)管理、任務(wù)管理2 2、內(nèi)存管理、內(nèi)存管理3 3、時間管理、時間管理4 4、任務(wù)間的通信與同步、任務(wù)間的通信與同步171. 任務(wù)管理任務(wù)管理(1)編寫形式 每一個任務(wù)必須被寫成一個無限循環(huán)的函無限循環(huán)的函數(shù)數(shù)。一個任務(wù)就像其他C函數(shù)一樣,有返回值類型和參數(shù),但因為任務(wù)函數(shù)是一個無限循環(huán),所以它絕不會返回任何的數(shù)據(jù),故返回類型應(yīng)該定義為void。18void task ( void* pdata )INT8U err; InitTimer();(); / 可選可選For( ; ) /應(yīng)用程序代碼應(yīng)用程序代碼OSTimeDl

9、y(1);); / 可選可選以下是一種推薦的結(jié)構(gòu):以下是一種推薦的結(jié)構(gòu):19 (2) 任務(wù)數(shù)C/OS-最多可以管理最多可以管理64個任務(wù)個任務(wù),在目前的版本中,作者保留了最高的4個優(yōu)先級和最低的4優(yōu)先級任務(wù),所以用戶實際上最多可以擁有56個任務(wù)。20 (3) 任務(wù)調(diào)度 C/OS-是一個基于優(yōu)先級的可剝奪型實時多任務(wù)內(nèi)核,因此優(yōu)先級最高的任務(wù)一旦準(zhǔn)備就緒,則就擁有cpu的所有權(quán)并開始投入運(yùn)行。任務(wù)調(diào)度是由函數(shù)ossched(void)調(diào)用OSCtxSw()實現(xiàn)的。其作用就是:從就緒隊列中查找最高優(yōu)先級的任務(wù)并進(jìn)行上下文切換。注意:C/OS-中任務(wù)的優(yōu)先級數(shù)越高,優(yōu)先級別越低,因此0優(yōu)先級的任務(wù)具

10、有最高的優(yōu)先級別。21(4) 任務(wù)控制塊TCB 系統(tǒng)對任務(wù)的管理是通過一個稱為任務(wù)控制塊TCB(task control blocks)的數(shù)據(jù)結(jié)構(gòu)進(jìn)行的。每個任務(wù)在被創(chuàng)建的時候,TCB將被賦值。當(dāng)任務(wù)的CPU使用權(quán)被剝奪時,C/OS-用任務(wù)控制塊來保存該任務(wù)的狀態(tài)。 C/OS-提供了任務(wù)管理的各種函數(shù),包括創(chuàng)建任務(wù)、刪除任務(wù)、改變?nèi)蝿?wù)的優(yōu)先級、掛起和恢復(fù)任務(wù)等。22OSTaskCreate()建立任務(wù)OSTaskDel()刪除任務(wù)OSTaskDelReq()請求刪除任務(wù)OSTaskChangePrio()改變?nèi)蝿?wù)的優(yōu)先級OSTaskSuspend()掛起任務(wù)OSTaskResume()恢復(fù)任務(wù)

11、OSTaskStkChk()堆棧檢驗OSTaskQuery()獲得有關(guān)任務(wù)的信息uC/OS-II提供如下任務(wù)管理的函數(shù)23系統(tǒng)初始化時會自動產(chǎn)生兩個任務(wù)系統(tǒng)初始化時會自動產(chǎn)生兩個任務(wù):一是空閑任務(wù)空閑任務(wù)OSTaskIdle()(),它的優(yōu)先級最低為OS_LOWEST_PRIO,該任務(wù)只是不停地給一個32位的整型變量加1;另一個是統(tǒng)計任務(wù)OSTaskStat(),它的優(yōu)先級為OS_LOWEST_PRIO-1,該任務(wù)每秒運(yùn)行一次,負(fù)責(zé)計算當(dāng)前CPU的利用率。24void OSTaskIdle ( )for (;) OS_ENTER_CRITICAL(); OSIdleCtr+; OS_EXIT_

12、CRITICAL(); 空閑任務(wù)252. 內(nèi)存管理內(nèi)存管理 ANSI C中,一般采用malloc()和()和free()()這兩個函數(shù)動態(tài)地分配和釋放內(nèi)存。這樣,隨著內(nèi)存空間的不斷分配與釋放,就會把原來很大的一塊連續(xù)內(nèi)存區(qū)域逐漸地分割成許多非常小的但彼此之間又不相鄰的內(nèi)存塊,也就是產(chǎn)生內(nèi)存碎片問題內(nèi)存碎片問題。為了消除這因多次分配與釋放內(nèi)存所引起的內(nèi)存碎片問題,C/OS-采取了這樣一種內(nèi)存管理機(jī)制。將連續(xù)的大塊內(nèi)存內(nèi)存管理機(jī)制。將連續(xù)的大塊內(nèi)存分成若干分區(qū),每個分區(qū)再分塊。每個分區(qū)中分成若干分區(qū),每個分區(qū)再分塊。每個分區(qū)中都包含整數(shù)個大小都包含整數(shù)個大小26 相同的內(nèi)存塊,但不同分區(qū)之間內(nèi)存塊

13、相同的內(nèi)存塊,但不同分區(qū)之間內(nèi)存塊的大小可以不同。的大小可以不同。用戶需要動態(tài)分配內(nèi)存時,可選擇一個適當(dāng)?shù)姆謪^(qū),按塊來可選擇一個適當(dāng)?shù)姆謪^(qū),按塊來進(jìn)行內(nèi)存分配進(jìn)行內(nèi)存分配。釋放內(nèi)存時將該塊放回它以前所屬的分區(qū),這樣就能有效解決內(nèi)存碎片問題。同時同時每次調(diào)用malloc()和free()分配和釋放的都是整數(shù)倍的固定內(nèi)存塊長,這樣執(zhí)行時間就是確定執(zhí)行時間就是確定的了的了。27 系統(tǒng)對內(nèi)存的管理是通過內(nèi)存控制塊(memory control blocks)數(shù)據(jù)結(jié)構(gòu)來進(jìn)行的,每個分區(qū)都有屬于自己的內(nèi)存控制塊。28(1)OSMemCreate (),用于建立一個內(nèi)存分區(qū)。(2)OSMemGet(),用于

14、分配一個內(nèi)存塊。(3)OSMemPut (),釋放一個內(nèi)存塊。(4)OSMemQuery (),用于查詢一個特定內(nèi)存分區(qū)的狀態(tài)。 C/OS-2提供了對內(nèi)存進(jìn)行管理的函數(shù)29 C/OS-提供一個時鐘節(jié)拍,它是一種特殊的中斷,操作系統(tǒng)的心臟。首先32位的整數(shù)OSTime加一。對任務(wù)列表進(jìn)行掃描,判斷是否有延時任務(wù)處于準(zhǔn)備就緒狀態(tài),最后進(jìn)行上下文切換。3. 時間管理時間管理30 在多任務(wù)操作系統(tǒng)中多任務(wù)操作系統(tǒng)中,多個任務(wù)并發(fā)執(zhí)行,這時可能會出現(xiàn)某個任務(wù)的執(zhí)行結(jié)果是另一任務(wù)的執(zhí)行條件,因而任務(wù)之間需互發(fā)信號,以使得各任務(wù)按一定的速度執(zhí)行。這里的信號(signal)被看成是事件(event),如信號量

15、、郵箱、消息隊列等。C/OS-系統(tǒng)中提供了數(shù)據(jù)結(jié)構(gòu)事件控制塊來實現(xiàn)信號量、郵箱、消息隊列的管理。 4. 任務(wù)間的通信與同步任務(wù)間的通信與同步31 由兩部分組成: 一個是信號量的計數(shù)值,它是一個16位的無符號整數(shù)(0到65,535之間); 一個是由等待該信號量的任務(wù)組成的等待任務(wù)表。 信號量的意義據(jù)系統(tǒng)不同可以有多種:如表示可用資源數(shù)。當(dāng)表示資源數(shù)時,舉個例子來說明信號量321) OSSemCreate()函數(shù),用于建立信號量,并對信號量賦0到65535之間的一個數(shù)為其初值。2) OSSemDel()函數(shù),用于刪除一個信號量。3) OSSemPend()函數(shù),用于等待即申請一個信號量,對信號量進(jìn)

16、行減1操作。4) OSSemPost()函數(shù),用于發(fā)送一個信號量,對信號量進(jìn)行加1操作。若加1后的信號量等于0,則說明有任務(wù)在等待該信號量。故OSSemPost()還需要喚醒一個處于等待該信號的其它任務(wù)。 系統(tǒng)提供的信號量管理的基本函數(shù)如下33四、C/OS-的文件體系C/OS-的文件體系結(jié)構(gòu)如下圖所示,包括 以 下 三 個 部 分 , 應(yīng) 用 軟 件 層 是 基 于C/OS-的代碼。應(yīng)用軟件核心代碼(處理器無關(guān))OS_CORE . COS_MBOX . COS_MEM . COS_Q . COS_SEM . COS_TASK . COS_TIME . CuCOS_II . H設(shè)置代碼(應(yīng)用相關(guān)

17、)OS_CFG . HINCLUDES . H 核心代碼 消息隊列 存儲管理 消息管理 信號量 任務(wù)調(diào)度 定時管理OS_CPU . H OS_CPU_A . ASM OS_CPU_C . C341) 核心代碼部分,包括事件的管理,消息隊列的管理,存儲管理,消息管理,信號量處理,任務(wù)調(diào)度和定時管理35 2)設(shè)置代碼部分,包括兩個頭文件,用戶在設(shè)置代碼中可以配置事件控制塊的數(shù)目以及是否包含消息管理相關(guān)的代碼等等。 3)處理器相關(guān)的移植代碼部分,這部分包括一個頭文件,一個匯編文件和一個C代碼文件,在隨后的C/OS-的移植過程中,用戶所需要關(guān)注的就是這部分文件。367.1.2C/OS-在在S3C44B

18、0XS3C44B0X上的移植上的移植一、移植條件一、移植條件 二、移植內(nèi)容二、移植內(nèi)容 三、移植及測試三、移植及測試 主要內(nèi)容371、處理器的C編譯器能產(chǎn)生可重入代碼 2、用C語言就可以打開和關(guān)閉中斷 3、處理器支持中斷并且能產(chǎn)生定時中斷 4、處理器支持容納一定量數(shù)據(jù)的硬件堆棧 5、處理器有將堆棧指針和其他CPU寄存 器讀出和存儲到堆?;騼?nèi)存中的指令一、移植的條件38(1)處理器的C編譯器能產(chǎn)生可重入代碼可重入代碼指的是可以被多個任務(wù)同時調(diào)用,但不會破壞數(shù)據(jù)的一段代碼,或者說代碼具有在執(zhí)行過程中打斷后再次被調(diào)用的能力。C/OS-是多任務(wù)內(nèi)核,函數(shù)可能會被多個任務(wù)調(diào)用。所以要完成多任務(wù),代碼的可

19、重入性是基礎(chǔ)。 下面列舉了兩個函數(shù)例子,它們的區(qū)別在于變量temp保存的位置不同,左邊temp作為全局變量存在,右邊函數(shù)中temp作為函數(shù)的局部變量存在,因此左邊的函數(shù)是不可重入的,而右邊的函數(shù)是可以重入的。39int temp;void swap (int *x,int*y)temp=*x;*x=*y;*y=temp;void swap (int *x,int*y)int temp;temp=*x;*x=*y;*y=temp;40 由此可見,在函數(shù)中應(yīng)盡量避免使用全局變量。 此外,除了在C程序中要使用局部變量以外,還需要C編譯器的支持,使用ADS,Embest IDE,ADT等集成開發(fā)環(huán)境,

20、可以生成可重入的代碼。41(2)用C語言就可以打開和關(guān)閉中斷uCOS-II在C語言代碼中通過使用以下兩個宏OS_ENTER_CRITICAL ( ) OS_EXIT_CRITICAL( )打開和關(guān)閉中斷,從而保護(hù)臨界代碼#define OS_ENTER_CRITICAL() ARMDisableInt()ARMDisableInt: mrs r12, CPSR /* 獲取模式寄存器獲取模式寄存器 */orr r12, r12, #I_BIT /* 設(shè)置禁止中斷位設(shè)置禁止中斷位 */msr CPSR_c, r12 /* 設(shè)置模式寄存器設(shè)置模式寄存器 */ bxlr42(3)處理器支持中斷并且能產(chǎn)

21、生定時中斷。(4)處理器能支持并容納一定量數(shù)據(jù)的硬件堆棧。(5)處理器有將堆棧指針和其他CPU寄存器讀出和存儲到堆棧或內(nèi)存中的指令。ARM處理器中匯編指令stmfd可以將所有寄存器壓棧,對應(yīng)也有一個出棧的指令ldmfd。43二、二、uC/OS-IIuC/OS-II移植內(nèi)容及步驟移植內(nèi)容及步驟移植第一步基本的配置和定義移植第二步移植與處理器相關(guān)的OS_CPU_A.ASM匯編代碼文件移植第三步移植與處理器相關(guān)的OS_CPU_C.C標(biāo)準(zhǔn)C代碼文件44一、定義編譯器相關(guān)的數(shù)據(jù)類型四、定義四、定義OS_TASK_SW()OS_TASK_SW()宏宏三、定義棧的增長方向三、定義棧的增長方向 二、定義允許和

22、禁止中斷宏typedef unsigned chartypedef unsigned char BOOLEAN; BOOLEAN;typedef unsigned chartypedef unsigned char INT8U; INT8U;typedef signed chartypedef signed char INT8S; INT8S;typedef unsigned shorttypedef unsigned short INT16U; INT16U;typedef signed shorttypedef signed short INT16S; INT16S;typedef unsigned longtypedef unsigned long INT32U; INT32U;typedef signed longtypedef signed long INT32S; INT32S;typedef floattypedef float FP32; FP32; typedef doubletypedef double FP64; FP64;define OS_STK_GROWTH define OS_STK_GROWTH 0 0 / /* *從下往上從下往上* */ /define OS_STK_GROWTH def

溫馨提示

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

評論

0/150

提交評論