從μC/OS―II到μC/OS―III的各種改進(jìn)
摘要:相比μC/OS—II,μC/OS—III做了很多改進(jìn),比如任務(wù)調度策略、時(shí)間節拍管理等,不僅消除了μC/OS—II中的一些局限,而且增加了一些全新的功能。本文首先介紹了μC/OS—II的特點(diǎn)與局限,然后介紹了μC/OS—III所做的各種改進(jìn)。
關(guān)鍵詞:μC/OS—II;μC/OS—III;實(shí)時(shí)內核
引言
μC/OS系列內核都是源代碼開(kāi)放的、可移植、可固化、可裁剪的搶占式實(shí)時(shí)多任務(wù)內核。μC/OS誕生于1992年,是針對68HC11 CPU開(kāi)發(fā)的。μC/OS—II V2.0誕生于1998年,μC/OS—II V2.52誕生于2002年。針對這3個(gè)版本的實(shí)時(shí)內核,Jean J.Labrosse先生出版了3書(shū),分別為《μ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本書(shū)都有對應的中文譯著(zhù),第3本書(shū)比第2本書(shū)增加了約250頁(yè)新內容。μC/OS—III誕生于2009年,于2011年8月公開(kāi)源碼?!?mu;C/OS—III The Real Time Kernel》--書(shū)分為兩大部分:第1部分是對μC/OS—III硬件無(wú)關(guān)軟件的描述;第2部分講述μC/OS—III在不同型號的ARMCortex—M3/4單片機評估板上應用的范例。第1部分相同,第2部分對應不同硬件,目前已經(jīng)組合出版了6本書(shū),分別對應如下:
◆Freescale公司的以Kinetis53單片機為核心,面向醫療儀器類(lèi)應用的TWR—K53N512評估板;
◆NXP公司的以L(fǎng)PCI768(Cortex—M3核)為核心的評估板;
◆Renesas公司的以RX62N為核心的評估板;
◆Renesas公司的以帶以太網(wǎng)口的SH7216為核心的評估板;
◆ST公司的以STM32F107為核心的評估板;
◆TI公司的以L(fǎng)M3S9892為核心,面向小型機器人帶以太網(wǎng)口的VM—EVALBOT評估板。
μC/OS—III是針對32位CPU開(kāi)發(fā)的,相比μC/OS—II做了很多改動(dòng)。下面將詳細介紹μC/OS—II中的一些可以改進(jìn)的地方以及μC/OS—III中的一些新特性。
1 μC/OS—Il的特點(diǎn)與局限
μC/OS—II主要針對8/16位CPU開(kāi)發(fā),是一個(gè)搶占式的實(shí)時(shí)多任務(wù)內核。任務(wù)調度策略是基于任務(wù)的優(yōu)先級,總是運行處于就緒態(tài)的優(yōu)先級最高的任務(wù)。在μC/OS—II中,每個(gè)任務(wù)都有一個(gè)唯一的優(yōu)先級。μC/OS—IIV2.8之前的版本最多支持64個(gè)優(yōu)先級,從V2.8開(kāi)始最
多可支持255個(gè)優(yōu)先級。
μC/OS—II的核心是任務(wù)調度算法。任務(wù)調度算法的目標就是快速找出其中優(yōu)先級最高的處于就緒態(tài)的任務(wù)。為了做到這一點(diǎn),μC/OS —II巧妙地采用了查表法。在查表過(guò)程中,μC/OS—II需要快速找出1個(gè)8位數的第一個(gè)非零位的位置,這是通過(guò)1個(gè)由256個(gè)元素構成的查找表OSUnMapTb1[]實(shí)現的,該查找表記錄了每一個(gè)8位數的第一個(gè)非零位的位置。通過(guò)這種巧妙的查表算法,不論有多少個(gè)任務(wù)處于就緒態(tài),都能在很短的、確定的時(shí)間內找出其中優(yōu)先級最高的那個(gè)就緒任務(wù)。
如今,很多新的CPU都有一條計算前導零指令(CLZ)或功能類(lèi)似的指令,比如32位PowerPC處理器的CLZ指令、Freescale S12X雙核微控制器中的協(xié)處理器XGATE的Bit Field Find First One指令等。對于有這類(lèi)硬件指令的CPU,無(wú)需再使用μC/OS—II中的查表算法,可以利用這類(lèi)指令優(yōu)化任務(wù)調度算法。
實(shí)時(shí)系統有2類(lèi):軟實(shí)時(shí)系統和硬實(shí)時(shí)系統。軟實(shí)時(shí)系統中,各任務(wù)運行得越快越好,并不限定某一任務(wù)必須在多長(cháng)時(shí)間內完成。硬實(shí)時(shí)系統要求系統中的任何函數都有確定的執行周期數,任務(wù)運行必須準時(shí),執行時(shí)間不因任務(wù)多少而改變。大多數實(shí)時(shí)系統是二者的結合。μC /OS—II中僅有一處不滿(mǎn)足硬實(shí)時(shí)條件:OSTimeTiek()函數需要遍歷所有任務(wù)控制塊,執行時(shí)間受任務(wù)數目的影響,而該函數由時(shí)鐘節拍中斷服務(wù)程序調用,因此時(shí)鐘節拍中斷服務(wù)程序的執行時(shí)間也受任務(wù)多少影響。通過(guò)把這部分工作放到一個(gè)專(zhuān)門(mén)的系統級任務(wù)中去做,便可以解決這個(gè)問(wèn)題,使其成為一個(gè)滿(mǎn)足硬實(shí)時(shí)條件的RTOS。對于Freeseale公司的雙核微控制器S12X,還可以通過(guò)把時(shí)鐘節拍中斷的處理交給協(xié)處理器來(lái)完成,從而實(shí)現硬實(shí)時(shí)條件,提高RTOS的實(shí)時(shí)性。
評論