從μC/OS-II到μC/OS-III的各種改進
編者按:
μC/OSII對我國嵌入式實時作業系統的普及與推廣起到了十分積極的作用,在嵌入式系統教學、研究以及開發應用等方面頗有影響。2011年8月,μC/OSIII的原始碼在Micrium網站上公開,《μC/OSIII The Real Time Kernel》一書的修訂本也陸續釋出到網上,書中涉及的應用範例等也可以免費下載。μC/OSIII的使用許可策略仍類似μC/OS-II,用於商業目的是需要付費的,而對於教育和研究是免費的。這給我們學習、研究、應用RTOS提供了良好的條件。本刊將在學習園地欄目分5個主題介紹μC/OSIII,分別是《從μC/OSII到μC/OSIII的各種改進》、《μC/OSIII對任務排程的改進》、《μC/OSIII中的高效時鐘節拍管理機制》、《μC/OSIII對訊號量的改進》、《μC/OSIII為縮短中斷關閉時間做出的改進》。
摘要: 相比μC/OSII,μC/OSIII做了很多改進,比如任務排程策略、時間節拍管理等,不僅消除了μC/OSII中的一些侷限,而且增加了一些全新的功能。本文首先介紹了μC/OSII的特點與侷限,然後介紹了μC/OSIII所做的各種改進。
關鍵詞: μC/OS-II;μC/OS-III;實時核心
中圖分類號: TP316文獻標識碼: A
Various Improvements from μC/OS-II to μC/OS-III
Gong Hui,Gong Guanghua, Huang Tuchen
1. Department of Engineering Physics, Tsinghua University, Beijing 100084,China;2. Key Laboratory of Particle & Radiation Imaging, Ministry of Education, Tsinghua University
Abstract: Compared with μC/OSII, μC/OSIII makes many improvements, such as task scheduling mechanism and clock tick management. μC/OSIII eliminates some limitations of μC/OSII and adds some new functions. Features and limitations of μC/OSII are introduced
first, and then the various improvements made by μC/OSIII are described.
Key words: μC/OS-II; μC/OS-III; real-time kernel
引言
μC/OS系列核心都是原始碼開放的、可移植、可固化、可裁剪的搶佔式實時多工核心。μC/OS誕生於1992年,是針對68HC11 CPU開發的。μC/OSII V2.0誕生於1998年,μC/OSII V2.52誕生於2002年。針對這3個版本的實時核心,Jean J. Labrosse先生出版了3本書,分別為《μC/OS The RealTime Kernel》、《Micro C/OSII The RealTime kernel》和《Micro C/OSII The RealTime kernel(Second
Edition)》。其中,第2本和第3本書都有對應的中文譯著[12],第3本書比第2本書增加了約250頁新內容。μC/OSIII誕生於2009年,於2011年8月公開原始碼。《μC/OSIII The Real Time Kernel》一書分為兩大部分:第1部分是對μC/OSIII硬體無關軟體的描述;第2部分講述μC/OSIII在不同型號的ARM CortexM3/4微控制器評估板上應用的範例。第1部分相同,第2部分對應不同硬體,目前已經組合出版了6本書,分別對應如下:
◆ Freescale公司的以Kinetis53微控制器為核心,面向醫療儀器類應用的TWRK53N512評估板;
◆ NXP公司的以LPC1768(CortexM3核)為核心的評估板;
◆ Renesas公司的以RX62N 為核心的評估板;
◆ Renesas公司的以帶乙太網口的SH7216 為核心的評估板;
◆ ST公司的以STM32F107 為核心的評估板;
◆ TI公司的以LM3S9B92為核心,面向小型機器人帶乙太網口的VMEVALBOT評估板。
μC/OSIII是針對32位CPU開發的,相比μC/OSII做了很多改動。下面將詳細介紹μC/OSII中的一些可以改進的地方以及μC/OSIII中的一些新特性。
1 μC/OSII的特點與侷限
μC/OSII主要針對8/16位CPU開發,是一個搶佔式的實時多工核心。任務排程策略是基於任務的優先順序,總是執行處於就緒態的優先順序最高的任務。在μC/OSII中,每個任務都有一個唯一的優先順序。μC/OSII V2.8之前的版本最多支援64個優先順序,從V2.8開始最多可支援255個優先順序。
μC/OSII的核心是任務排程演算法。任務排程演算法的目標就是快速找出其中優先順序最高的處於就緒態的任務。為了做到這一點,μC/OSII巧妙地採用了查表法。在查表過程中,μC/OSII需要快速找出1個8位數的第一個非零位的位置,這是通過1個由256個元素構成的查詢表OSUnMapTbl[]實現的,該查詢表記錄了每一個8位數的第一個非零位的位置。通過這種巧妙的查表演算法,不論有多少個任務處於就緒態,都能在很短的、確定的時間內找出其中優先順序最高的那個就緒任務。
如今,很多新的CPU都有一條計算前導零指令(CLZ)或功能類似的指令,比如32位PowerPC處理器[3]的CLZ指令、Freescale S12X雙核微控制器[4]中的協處理器XGATE的Bit Field Find First One指令等。對於有這類硬體指令的CPU,無需再使用μC/OSII中的查表演算法,可以利用這類指令優化任務排程演算法[56]。
實時系統有2類:軟實時系統和硬實時系統。軟實時系統中,各任務執行得越快越好,並不限定某一任務必須在多長時間內完成。硬實時系統要求系統中的任何函式都有確定的執行週期數,任務執行必須準時,執行時間不因任務多少而改變。大多數實時系統是二者的結合。μC/OSII中僅有一處不滿足硬實時條件:OSTimeTick()函式需要遍歷所有任務控制塊,執行時間受任務數目的影響,而該函式由時鐘節拍中斷服務程式呼叫,因此時鐘節拍中斷服務程式的執行時間也受任務多少影響。通過把這部分工作放到一個專門的系統級任務中去做,便可以解決這個問題,使其成為一個滿足硬實時條件的RTOS。對於Freescale公司的雙核微控制器S12X,還可以通過把時鐘節拍中斷的處理交給協處理器來完成,從而實現硬實時條件,提高RTOS的實時性[78]。
2 μC/OSIII的新特性
μC/OSIII已經不僅僅是一個RTOS核心,而是包含很多與該核心配套的軟體開發包。和傳統的大型商用RTOS類似,μC/OSIII能以傳統的BSP(板級支援包)方式,實現諸如USB主機、檔案系統、TCP/IP協議棧等,還包括RTOS本身的除錯工具等。Micrium公司和很多軟體公司合作,提供很多基於μC/OSIII的通用商業軟體,如GUI、FS、USB、TCP/IP等。今後還會與更多的半導體廠商合作,提供更多商家的以ARM CortexM3/4為核心的μC/OSIII評估板。
μC/OSIII在功能上得到了全面的擴充套件和提升。μC/OSII最多支援255個任務,而μC/OSIII可以支援任意數目的任務,實際使用的任務數目僅受CPU所能使用的儲存空間的限制。μC/OSIII可以支援任意數目的訊號量、事件標誌組、訊息佇列、儲存塊等核心物件,而且,為了避免在程式編譯過程中出現資源不夠分配的問題,允許使用者在程式執行中動態配置核心資源。μC/OSII允許掛起某個任務,但掛起操作不可以巢狀,而μC/OSIII允許巢狀掛起某個任務,巢狀掛起最深可達250層。μC/OSIII增加了一個時鐘節拍任務來做延時處理和超時判斷。通過在任務級程式碼完成時鐘節拍服務,能極大地減少中斷延遲時間。而且,μC/OSIII使用了雜湊散列表機制,進一步降低了延時處理和超時判斷的開銷,提高了系統的實時性。
除了功能上的擴充套件和提升,μC/OSIII還增加了一些新功能。μC/OSIII增加了時間片輪轉排程,允許多個任務有相同的優先順序。當多個優先順序相同的任務同時就緒並且所屬優先順序高於其他所有就緒任務時,μC/OSIII輪轉排程這些任務,讓每個任務執行一段使用者指定的時間長度(即時間片)。
μC/OSIII允許中斷或任務直接給另一個任務發訊號或訊息。在實際應用中,很多情況下,程式設計人員知道該向哪個任務發訊號或訊息,這時就可以使用μC/OSIII的這種新功能來向目標任務直接發訊號或訊息,從而避免建立和使用諸如訊號量或訊息佇列等核心物件作為中介,提高訊號或訊息傳送的效率。μC/OSIII增加了時間戳功能,可以給訊號或訊息打上時間戳,從而允許使用者獲取某個事件發生的時刻,以及訊號或訊息傳遞到目標任務所耗費的時間等。
另外,μC/OSIII的設計能方便地按照CPU架構優化,特別是其資料型別可按照CPU能適應的最佳位數寬度修改,以適應8/16/32位的CPU。關鍵演算法可採用匯編程式設計,以發揮一些有特殊指令的CPU的優勢。很多CPU有讀改寫指令,可方便實現儲存器訪問的原子操作,有的CPU有計算前導零指令,可用來快速查詢任務就緒表。
μC/OSIII增加了中斷處理任務,可以把核心物件的處理工作都放到任務級程式碼中完成,從而允許通過給排程器上鎖的方式實現臨界段程式碼的保護,這樣就使核心關中斷的時鐘週期幾乎為零。μC/OSIII內建了對系統性能進行測試的程式碼,能夠檢測每個任務的執行時間、堆疊使用情況、每個任務執行的次數、CPU利用率、關閉中斷和給排程器上鎖的時間等。μC/OSIII還支援核心覺察式除錯,可以以友好的方式對μC/OSIII的變數、資料結構進行檢查和顯示,並且帶有μC/Probe除錯工具,可在程式執行過程中察看和修改變數。
結語
相比μC/OSII,μC/OSIII做了很多改進,比如改進了任務排程方法、改進了時鐘節拍管理機制、增加了中斷處理任務、允許向任務直接發訊號或訊息、增加了時間戳功能、支援核心覺察式除錯等。從這些改進來看,μC/OSIII比μC/OSII上升到一個更高的檔次。其中,一些主要的改進,比如μC/OSIII的任務排程方法的改進、時鐘節拍管理機制的改進、中斷管理方法的改進等會在後續專題文章中詳細介紹。
參考文獻
[1] Jean J Labrosse.μC/OSII原始碼公開的實時嵌入式作業系統[M]. 邵貝貝,等譯. 北京:北京航空航天大學,2001.
[2] Jean J Labrosse.嵌入式實時作業系統μC/OSII[M]. 邵貝貝,等譯.2版.北京:北京航空航天大學,2003.
[3] Freescale.Book E: Enhanced PowerPC Architecture,2002.
[4] Freescale .MC9S12XDP512 Data Sheet,2006.
[5] 邵貝貝.淺談μC/OS任務排程演算法的硬體實現[J].微控制器與嵌入式系統應用,2010(9).
[6] 龔光華,車惠軍.μC/OS優先順序排程機制在PowerPC架構處理器上的優化[J].微控制器與嵌入式系統應用, 2010(10).
[7] 馮澤東,邵貝貝.用協處理器提高μC/OSII的實時性[J].微控制器與嵌入式系統應用,2008(4).
[8] 邵貝貝,宮輝.嵌入式系統中的雙核技術[M].北京:北京航空航天大學出版社,2008.
(責任編輯:楊迪娜 收稿日期:2012-08-07)
http://www.mesnet.com.cn/fileup/HTML/20121023.shtml