uC/OS-II詳細介紹-百度百科
uC/OS-II簡介
u C / O S 是一種公開源代碼、結構小巧、具有可剝奪實時內核的實時操作系統(tǒng),商業(yè)應用需要付費。 μC/OS-II 的前身是μC/OS,最早出自于1992 年美國嵌入式系統(tǒng)專家Jean J.Labrosse 在《嵌入式系統(tǒng)編程》雜志的5 月和6 月刊上刊登的文章連載,并把μC/OS 的源碼發(fā)布在該雜志的B B S 上。
μC/OS 和μC/OS-II 是專門為計算機的嵌入式應用設計的, 絕大部分代碼是用C語言編寫的。CPU 硬件相關部分是用匯編語言編寫的、總量約200行的匯編語言部分被壓縮到最低限度,為的是便于移植到任何一種其它的CPU 上。用戶只要有標準的ANSI 的C交叉編譯器,有匯編器、連接器等軟件工具,就可以將μC/OS-II嵌人到開發(fā)的產(chǎn)品中。μC/OS-II 具有執(zhí)行效率高、占用空間小、實時性能優(yōu)良和可擴展性強等特點, 最小內核可編譯至 2KB 。μC/OS-II 已經(jīng)移植到了幾乎所有知名的CPU 上。
嚴格地說uC/OS-II只是一個實時操作系統(tǒng)內核,它僅僅包含了任務調度,任務管理,時間管理,內存管理和任務間的通信和同步等基本功能。沒有提供輸入輸出管理,文件系統(tǒng),網(wǎng)絡等額外的服務。但由于uC/OS-II良好的可擴展性和源碼開放,這些非必須的功能完全可以由用戶自己根據(jù)需要分別實現(xiàn)。 uC/OS-II目標是實現(xiàn)一個基于優(yōu)先級調度的搶占式的實時內核,并在這個內核之上提供最基本的系統(tǒng)服務,如信號量,郵箱,消息隊列,內存管理,中斷管理等。
任務管理
uC/OS-II 中最多可以支持64 個任務,分別對應優(yōu)先級0~63,其中0 為最高優(yōu)先級。63為最低級,系統(tǒng)保留了4個最高優(yōu)先級的任務和4個最低優(yōu)先級的任務,所有用戶可以使用的任務數(shù)有56個。
uC/OS-II提供了任務管理的各種函數(shù)調用,包括創(chuàng)建任務,刪除任務,改變任務的優(yōu)先級,任務掛起和恢復等。
系統(tǒng)初始化時會自動產(chǎn)生兩個任務:一個是空閑任務,它的優(yōu)先級最低,該任務僅給一個整形變量做累加運算;另一個是系統(tǒng)任務,它的優(yōu)先級為次低,該任務負責統(tǒng)計當前cpu的利用率。
時間管理
uC/OS-II的時間管理是通過定時中斷來實現(xiàn)的,該定時中斷一般為10毫秒或100毫秒發(fā)生一次,時間頻率取決于用戶對硬件系統(tǒng)的定時器編程來實現(xiàn)。中斷發(fā)生的時間間隔是固定不變的,該中斷也成為一個時鐘節(jié)拍。
uC/OS-II要求用戶在定時中斷的服務程序中,調用系統(tǒng)提供的與時鐘節(jié)拍相關的系統(tǒng)函數(shù),例如中斷級的任務切換函數(shù),系統(tǒng)時間函數(shù)。
內存管理
在ANSI C中是使用malloc和free兩個函數(shù)來動態(tài)分配和釋放內存。但在嵌入式實時系統(tǒng)中,多次這樣的錯作會導致內存碎片,且由于內存管理算法的原因,malloc和free的執(zhí)行時間也是不確定。
uC/OS-II中把連續(xù)的大快內存按分區(qū)管理。每個分區(qū)中包含整數(shù)個大小相同的內存塊,但不同分區(qū)之間的內存快大小可以不同。用戶需要動態(tài)分配內存時,系統(tǒng)選擇一個適當?shù)姆謪^(qū),按塊來分配內存。釋放內存時將該塊放回它以前所屬的分區(qū),這樣能有效解決碎片問題,同時執(zhí)行時間也是固定的。
任務間通信與同步
對一個多任務的操作系統(tǒng)來說,任務間的通信和同步是必不可少的。uC/OS-II中提供了4中同步對象,分別是信號量,郵箱,消息隊列和事件。所有這些同步對象都有創(chuàng)建,等待,發(fā)送,查詢的接口用于實現(xiàn)進程間的通信和同步。
任務調度
uC/OS-II 采用的是可剝奪型實時多任務內核。可剝奪型的實時內核在任何時候都運行就緒了的最高優(yōu)先級的任務。
uC/os-II的任務調度是完全基于任務優(yōu)先級的搶占式調度,也就是最高優(yōu)先級的任務一旦處于就緒狀態(tài),則立即搶占正在運行的低優(yōu)先級任務的處理器資源。為了簡化系統(tǒng)設計,uC/OS-II規(guī)定所有任務的優(yōu)先級不同,因為任務的優(yōu)先級也同時唯一標志了該任務本身。
任務調度將在以下情況下發(fā)生:
1) 高優(yōu)先級的任務因為需要某種臨界資源,主動請求掛起,讓出處理器,此時將調度就緒狀態(tài)的低優(yōu)先級任務獲得執(zhí)行,這種調度也稱為任務級的上下文切換。
2) 高優(yōu)先級的任務因為時鐘節(jié)拍到來,在時鐘中斷的處理程序中,內核發(fā)現(xiàn)高優(yōu)先級任務獲得了執(zhí)行條件(如休眠的時鐘到時),則在中斷態(tài)直接切換到高優(yōu)先級任務執(zhí)行。這種調度也稱為中斷級的上下文切換。 這兩種調度方式在uC/OS-II的執(zhí)行過程中非常普遍,一般來說前者發(fā)生在系統(tǒng)服務中,后者發(fā)生在時鐘中斷的服務程序中。
調度工作的內容可以分為兩部分:最高優(yōu)先級任務的尋找和任務切換。其最高優(yōu)先級任務的尋找是通過建立就緒任務表來實現(xiàn)的。u C / O S 中的每一個任務都有獨立的堆??臻g,并有一個稱為任務控制塊TCB(Task Control Block)的數(shù)據(jù)結構,其中第一個成員變量就是保存的任務堆棧指針。任務調度模塊首先用變量OSTCBHighRdy 記錄當前最高級就緒任務的TCB 地址,然后調用OS_TASK_SW()函數(shù)來進行任務切換。
μC/OS-II的組成部分
μC/OS-II可以大致分成核心、任務處理、時間處理、任務同步與通信,CPU的移植等5個部分。
1) 核心部分(OSCore.c) 是操作系統(tǒng)的處理核心,包括操作系統(tǒng)初始化、操作系統(tǒng)運行、中斷進出的前導、時鐘節(jié)拍、任務調度、事件處理等多部分。能夠維持系統(tǒng)基本工作的部分都在這里。
2) 任務處理部分(OSTask.c) 任務處理部分中的內容都是與任務的操作密切相關的。包括任務的建立、刪除、掛起、恢復等等。因為μC/OS-II是以任務為基本單位調度的,所以這部分內容也相當重要。
3) 時鐘部分(OSTime.c) μC/OS-II中的最小時鐘單位是timetick(時鐘節(jié)拍)。任務延時等操作是在這里完成的。
4) 任務同步和通信部分 為事件處理部分,包括信號量、郵箱、郵箱隊列、事件標志等部分;主要用于任務間的互相聯(lián)系和對臨界資源的訪問。
5) 與CPU的接口部分 是指μC/OS-II針對所使用的CPU的移植部分。由于μC/OS-II是一個通用性的操作系統(tǒng),所以對于關鍵問題上的實現(xiàn),還是需要根據(jù)具體CPU的具體內容和要求作相應的移植。這部分內容由于牽涉到SP等系統(tǒng)指針,所以通常用匯編語言編寫。主要包括中斷級任務切換的底層實現(xiàn)、任務級任務切換的底層實現(xiàn)、時鐘節(jié)拍的產(chǎn)生和處理、中斷的相關處理部分等內容。
評論