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





