摘要:相比μC/OS—II,μC/OS—III做了很多改進,比如任務調(diào)度策略、時間節(jié)拍管理等,不僅消除了μC/OS—II中的一些局限,而且增加了一些全新的功能。本文首先介紹了μC/OS—II的特點與局限,然后介紹了μC/OS—III所做的各種改進。
關鍵詞:μC/OS—II;μC/OS—III;實時內(nèi)核
引言
μC/OS系列內(nèi)核都是源代碼開放的、可移植、可固化、可裁剪的搶占式實時多任務內(nèi)核。μC/OS誕生于1992年,是針對68HC11 CPU開發(fā)的。μC/OS—II V2.0誕生于1998年,μC/OS—II V2.52誕生于2002年。針對這3個版本的實時內(nèi)核,Jean J.Labrosse先生出版了3書,分別為《μC/OS The Real—Time Kernel》、《Micro C/OS—II The Real—Time kernel》和《Micro C/OS—II TheReal—Time kernel(Second Edition)》。其中,第2本和第3本書都有對應的中文譯著,第3本書比第2本書增加了約250頁新內(nèi)容。μC/OS—III誕生于2009年,于2011年8月公開源碼?!?mu;C/OS—III The Real Time Kernel》--書分為兩大部分:第1部分是對μC/OS—III硬件無關軟件的描述;第2部分講述μC/OS—III在不同型號的ARMCortex—M3/4單片機評估板上應用的范例。第1部分相同,第2部分對應不同硬件,目前已經(jīng)組合出版了6本書,分別對應如下:
◆Freescale公司的以Kinetis53單片機為核心,面向醫(yī)療儀器類應用的TWR—K53N512評估板;
◆NXP公司的以LPCI768(Cortex—M3核)為核心的評估板;
◆Renesas公司的以RX62N為核心的評估板;
◆Renesas公司的以帶以太網(wǎng)口的SH7216為核心的評估板;
◆ST公司的以STM32F107為核心的評估板;
◆TI公司的以LM3S9892為核心,面向小型機器人帶以太網(wǎng)口的VM—EVALBOT評估板。
μC/OS—III是針對32位CPU開發(fā)的,相比μC/OS—II做了很多改動。下面將詳細介紹μC/OS—II中的一些可以改進的地方以及μC/OS—III中的一些新特性。
1 μC/OS—Il的特點與局限
μC/OS—II主要針對8/16位CPU開發(fā),是一個搶占式的實時多任務內(nèi)核。任務調(diào)度策略是基于任務的優(yōu)先級,總是運行處于就緒態(tài)的優(yōu)先級最高的任務。在μC/OS—II中,每個任務都有一個唯一的優(yōu)先級。μC/OS—IIV2.8之前的版本最多支持64個優(yōu)先級,從V2.8開始最
多可支持255個優(yōu)先級。
μC/OS—II的核心是任務調(diào)度算法。任務調(diào)度算法的目標就是快速找出其中優(yōu)先級最高的處于就緒態(tài)的任務。為了做到這一點,μC/OS —II巧妙地采用了查表法。在查表過程中,μC/OS—II需要快速找出1個8位數(shù)的第一個非零位的位置,這是通過1個由256個元素構(gòu)成的查找表OSUnMapTb1[]實現(xiàn)的,該查找表記錄了每一個8位數(shù)的第一個非零位的位置。通過這種巧妙的查表算法,不論有多少個任務處于就緒態(tài),都能在很短的、確定的時間內(nèi)找出其中優(yōu)先級最高的那個就緒任務。
如今,很多新的CPU都有一條計算前導零指令(CLZ)或功能類似的指令,比如32位PowerPC處理器的CLZ指令、Freescale S12X雙核微控制器中的協(xié)處理器XGATE的Bit Field Find First One指令等。對于有這類硬件指令的CPU,無需再使用μC/OS—II中的查表算法,可以利用這類指令優(yōu)化任務調(diào)度算法。
實時系統(tǒng)有2類:軟實時系統(tǒng)和硬實時系統(tǒng)。軟實時系統(tǒng)中,各任務運行得越快越好,并不限定某一任務必須在多長時間內(nèi)完成。硬實時系統(tǒng)要求系統(tǒng)中的任何函數(shù)都有確定的執(zhí)行周期數(shù),任務運行必須準時,執(zhí)行時間不因任務多少而改變。大多數(shù)實時系統(tǒng)是二者的結(jié)合。μC /OS—II中僅有一處不滿足硬實時條件:OSTimeTiek()函數(shù)需要遍歷所有任務控制塊,執(zhí)行時間受任務數(shù)目的影響,而該函數(shù)由時鐘節(jié)拍中斷服務程序調(diào)用,因此時鐘節(jié)拍中斷服務程序的執(zhí)行時間也受任務多少影響。通過把這部分工作放到一個專門的系統(tǒng)級任務中去做,便可以解決這個問題,使其成為一個滿足硬實時條件的RTOS。對于Freeseale公司的雙核微控制器S12X,還可以通過把時鐘節(jié)拍中斷的處理交給協(xié)處理器來完成,從而實現(xiàn)硬實時條件,提高RTOS的實時性。
2 μC/OS-III的新特性
μC/OS—III已經(jīng)不僅僅是一個RTOS內(nèi)核,而是包含很多與該內(nèi)核配套的軟件開發(fā)包。和傳統(tǒng)的大型商用RTOS類似,μC/OS—III能以傳統(tǒng)的BSP(板級支持包)方式,實現(xiàn)諸如USB主機、文件系統(tǒng)、TCP/IP協(xié)議棧等,還包括RTOS本身的調(diào)試工具等。Micrium公司和很多軟件公司合作,提供很多基于μC/OS—III的通用商業(yè)軟件,如GUI、FS、USB、TCP/IP等。今后還會與更多的半導體廠商合作,提供更多商家的以ARM Cortex—M3/4為核心的μC/OS—III評估板。
μC/OS—III在功能上得到了全面的擴展和提升。μC/OS—II最多支持255個任務,而μC/OS—III可以支持任意數(shù)目的任務,實際使用的任務數(shù)目僅受CPU所能使用的存儲空間的限制。μC/OS—III可以支持任意數(shù)目的信號量、事件標志組、消息隊列、存儲塊等內(nèi)核對象,而且,為了避免在程序編譯過程中出現(xiàn)資源不夠分配的問題,允許用戶在程序運行中動態(tài)配置內(nèi)核資源。μC/OS—II允許掛起某個任務,但掛起操作不可以嵌套,而μC/OS—III允許嵌套掛起某個任務,嵌套掛起最深可達250層。μC/OS—III增加了一個時鐘節(jié)拍任務來做延時處理和超時判斷。通過在任務級代碼完成時鐘節(jié)拍服務,能極大地減少中斷延遲時間。而且,μC/OS—III使用了哈希散列表機制,進一步降低了延時處理和超時判斷的開銷,提高了系統(tǒng)的實時性。
除了功能上的擴展和提升,μC/OS—III還增加了一些新功能。μC/OS—III增加了時間片輪轉(zhuǎn)調(diào)度,允許多個任務有相同的優(yōu)先級。當多個優(yōu)先級相同的任務同時就緒并且所屬優(yōu)先級高于其他所有就緒任務時,μC/OS—III輪轉(zhuǎn)調(diào)度這些任務,讓每個任務運行一段用戶指定的時間長度(即時間片)。
μC/OS—III允許中斷或任務直接給另一個任務發(fā)信號或消息。在實際應用中,很多情況下,編程人員知道該向哪個任務發(fā)信號或消息,這時就可以使用μC/OS—III的這種新功能來向目標任務直接發(fā)信號或消息,從而避免創(chuàng)建和使用諸如信號量或消息隊列等內(nèi)核對象作為中介,提高信號或消息發(fā)送的效率。μC/OS—III增加了時間戳功能,可以給信號或消息打上時間戳,從而允許用戶獲取某個事件發(fā)生的時刻,以及信號或消息傳遞到目標任務所耗費的時間等。
另外,μC/OS-III的設計能方便地按照CPU架構(gòu)優(yōu)化,特別是其數(shù)據(jù)類型可按照CPU能適應的最佳位數(shù)寬度修改,以適應8/16/32位的CPU。關鍵算法可采用匯編程,以發(fā)揮一些有特殊指令的CPU的優(yōu)勢。很多CP有讀改寫指令,可方便實現(xiàn)存儲器訪問的原子操作,有的CPU有計算前導零指令,可用來快速查找任務就緒表。
μC/OS—III增加了中斷處理任務,可以把內(nèi)核對象的處理工作都放到任務級代碼中完成,從而允許通過給調(diào)度器上鎖的方式實現(xiàn)臨界段代碼的保護,這樣就使內(nèi)核關中斷的時鐘周期幾乎為零。μC/OS—III內(nèi)置了對系統(tǒng)性能進行測試的代碼,能夠檢測每個任務的執(zhí)行時間、堆棧使用情況、每個任務運行的次數(shù)、CPU利用率、關閉中斷和給調(diào)度器上鎖的時間等。μC/OS—III還支持內(nèi)核覺察式調(diào)試,可以以友好的方式對μC/OS—III的變量、數(shù)據(jù)結(jié)構(gòu)進行檢查和顯示,并且?guī)в?mu;C/Probe調(diào)試工具,可在程序運行過程中察看和修改變量。
結(jié)語
相比μC/OS—II,μC/OS—III做了很多改進,比如改進了任務調(diào)度方法、改進了時鐘節(jié)拍管理機制、增加了中斷處理任務、允許向任務直接發(fā)信號或消息、增加了時間戳功能、支持內(nèi)核覺察式調(diào)試等。從這些改進來看,μC/OS—III比μC/OS—II上升到一個更高的檔次。其中,一主要的改進,比如μC/OS—III的任務調(diào)度方法的改進、時鐘節(jié)拍管理機制的改進、中斷管理方法的改進等會在后續(xù)專題文章中詳細介紹。