uC/OS-Ⅱ簡介
在嵌入式應(yīng)用系統(tǒng)的設(shè)計(jì)中,實(shí)時(shí)操作系統(tǒng)的應(yīng)用越來越受到重視。目前市場上可以選擇的實(shí)時(shí)操作系統(tǒng)很多,一些商用系統(tǒng)為用戶提供了非常豐富的功能,不僅包括實(shí)時(shí)內(nèi)核,同時(shí)還包括輸入輸出管理、文件系統(tǒng)、網(wǎng)絡(luò)、調(diào)試軟件等。但是對于中小型的嵌入式應(yīng)用系統(tǒng)來說,商用實(shí)時(shí)操作系統(tǒng)的成本太高,所以采用免費(fèi)軟件是最好的選擇。uC/OS-Ⅱ是一個免費(fèi)的源代碼公開的實(shí)時(shí)嵌入式內(nèi)核,它提供了實(shí)時(shí)系統(tǒng)所需的基本功能。其包含全部功能的核心部分代碼只占用8.3K字節(jié),而且由于uC/OS-Ⅱ是可裁剪的,所以用戶系統(tǒng)中實(shí)際的代碼最少可達(dá)2.7K字節(jié),可謂短小精悍。uC/OS-Ⅱ不僅使用戶得到廉價(jià)的解決方案,而且由于uC/OS-Ⅱ的開源特性,用戶還可以針對自己的硬件優(yōu)化代碼,以獲得更好的性能。,bRM6z
uC/OS-Ⅱ?qū)嶋H上是一個實(shí)時(shí)操作系統(tǒng)內(nèi)核,只包含了任務(wù)調(diào)度、任務(wù)管理、時(shí)間管理、內(nèi)存管理和任務(wù)間的通信與同步等基本功能。沒有提供輸入輸出管理、文件系統(tǒng)、網(wǎng)絡(luò)之類的額外服務(wù)。但是由于uC/OS-Ⅱ的可移植性和開源性,用戶可以自己添加所需的各種服務(wù)。目前,已經(jīng)出現(xiàn)了第三方為uC/OS-Ⅱ開發(fā)的文件系統(tǒng)、TCP/IP協(xié)議棧、用戶顯示接口等。;C`wO
uC/OS-Ⅱ的任務(wù)調(diào)度是按搶占式多任務(wù)系統(tǒng)設(shè)計(jì)的,即它總是執(zhí)行處于就緒條件下優(yōu)先級最高的任務(wù)。為了簡化系統(tǒng)的設(shè)計(jì),uC/OS-Ⅱ規(guī)定所有任務(wù)的優(yōu)先級必須不同,任務(wù)的優(yōu)先級同時(shí)也唯一地標(biāo)識了該任務(wù)。即使兩個任務(wù)的重要性是相同的,它們也必須有優(yōu)先級上的差異,這也就意味著高優(yōu)先級的任務(wù)在處理完成后必須進(jìn)入等待或掛起狀態(tài),否則低優(yōu)先級的任務(wù)永遠(yuǎn)也不可能執(zhí)行。系統(tǒng)通過兩種方法進(jìn)行任務(wù)調(diào)度:一是時(shí)鐘節(jié)拍或其它硬件中斷到來后,系統(tǒng)會調(diào)用函數(shù)OSIntCtxSw()執(zhí)行切換功能;二是任務(wù)主動進(jìn)入掛起或等待狀態(tài),這時(shí)系統(tǒng)通過發(fā)軟中斷命令或依靠處理器執(zhí)行陷阱指令來完成任務(wù)切換,中斷服務(wù)例程或陷阱處理程序的向量地址必須指向函數(shù)OSCtxSw()。;3yL
uC/OS-Ⅱ最多可以管理64個任務(wù),這些任務(wù)通常都是一個無限循環(huán)的函數(shù)。在目前的版本中,作者保留了優(yōu)先級為0、1、2、3、OS_LOWEST_PRIO-3、OS_LOWEST_PRIO-2、OS_LOWEST_PRIO-1、OS_LOWEST_PRIO的任務(wù),所以用戶可以同時(shí)擁有56個任務(wù)。uC/OS-Ⅱ提供了任務(wù)管理的各種函數(shù)調(diào)用,包括創(chuàng)建任務(wù)、刪除任務(wù)、改變?nèi)蝿?wù)的優(yōu)先級、掛起和恢復(fù)任務(wù)等。系統(tǒng)初始化時(shí)會自動產(chǎn)生兩個任務(wù):一是空閑任務(wù)OSTaskIdle(),它的優(yōu)先級最低為OS_LOWEST_PRIO,該任務(wù)只是不停地給一個32位的整型變量加一;另一個是統(tǒng)計(jì)任務(wù)OSTaskStat(),它的優(yōu)先級為OS_LOWEST_PRIO-1,該任務(wù)每秒運(yùn)行一次,負(fù)責(zé)計(jì)算當(dāng)前CPU的利用率。XfIj
uC/OS-Ⅱ要求用戶提供一個稱為時(shí)鐘節(jié)拍的定時(shí)中斷,該中斷每秒發(fā)生10至100次,時(shí)鐘節(jié)拍的實(shí)際頻率是由用戶控制的。任務(wù)申請延時(shí)或超時(shí)控制的計(jì)時(shí)基準(zhǔn)就是該時(shí)鐘節(jié)拍。該時(shí)鐘節(jié)拍同時(shí)還是任務(wù)調(diào)度的時(shí)間基準(zhǔn)。uC/OS-Ⅱ提供了與時(shí)鐘節(jié)拍相關(guān)的系統(tǒng)服務(wù),允許任務(wù)延時(shí)一定數(shù)量的時(shí)鐘節(jié)拍或按時(shí)、分、秒、毫秒進(jìn)行延時(shí)。")fT
對于一個多任務(wù)操作系統(tǒng)來說,任務(wù)間的通信與同步是必不可少的。uC/OS-Ⅱ提供了四種同步對象,分別是信號量、郵箱、消息隊(duì)列和事件。通過郵箱和消息隊(duì)列還可以進(jìn)行任務(wù)間的通信。所有的同步對象都有相應(yīng)的創(chuàng)建、等待、發(fā)送的函數(shù)。但這些對象一旦創(chuàng)建就不能刪除,所以要避免創(chuàng)建過多的同步對象以節(jié)約系統(tǒng)資源。QLc6,]
為了消除多次動態(tài)分配與釋放內(nèi)存所引起的內(nèi)存碎片,uC/OS-Ⅱ把連續(xù)的大塊內(nèi)存按分區(qū)來管理。每個分區(qū)中都包含整數(shù)個大小相同的內(nèi)存塊,但不同分區(qū)之間內(nèi)存塊的大小可以不同。用戶需要動態(tài)分配內(nèi)存時(shí),選擇一個適當(dāng)?shù)姆謪^(qū),按塊來分配內(nèi)存。釋放內(nèi)存時(shí)將該塊放回它以前所屬的分區(qū)。這樣,就能有效解決內(nèi)存碎片的問題。Qq.
uC/OS-Ⅱ的大部分代碼是用ANSI C寫成的,只有與處理器硬件相關(guān)的一部分代碼用匯編語言編寫。所以uC/OS-Ⅱ的移植性很強(qiáng),可以在絕大多數(shù)8位、16位、32位微處理器、數(shù)字信號處理器上運(yùn)行。uC/OS-Ⅱ的移植并不復(fù)雜,只要編寫4個匯編語言的函數(shù)、6個C函數(shù)再定義3個宏和1個常量,這些宏和函數(shù)都非常簡單,其中的5個C函數(shù)甚至只需聲明不必包含代碼。用戶可以根據(jù)需要自己編寫移植代碼。uC/OS-Ⅱ的網(wǎng)站上(www.uCOS-II.com)有針對不同微處理器的移植代碼可供下載。目前網(wǎng)站上提供的移植實(shí)例包括Intel公司的80x86、8051、80196等,Motorola公司的PowerPC、68K、CPU32等,TI公司的TMS320系列,Zilog公司的z-80、z-180,還包括Analog Device公司、ARM公司、日立公司、三菱公司、飛利浦公司和西門子公司的各種微處理器。a"WFu
© uC/OS-Ⅱ是在PC機(jī)上開發(fā)的,C編譯器使用的是Borland C/C++ 3.1版,而且PC機(jī)是大家最熟悉的開發(fā)環(huán)境,所以在PC機(jī)上學(xué)習(xí)和使用uC/OS-Ⅱ是非常方便的。uC/OS-Ⅱ的網(wǎng)站上也提供了在PC機(jī)上運(yùn)行uC/OS-Ⅱ的源代碼。但是由于C/C++運(yùn)行庫和DOS本身的限制,在PC上運(yùn)行uC/OS-Ⅱ時(shí)需要注意兩個問題。3y=k1@
第一,由于DOS下的C編譯器提供的運(yùn)行庫沒有考慮多線程應(yīng)用的問題,運(yùn)行庫中的全局變量和部分函數(shù)只適用于單線程。這些變量和函數(shù)包括:errno、_doserrno、strtok、strerror、tmpnam、tmpfile、asctime、gmtime、ecvt、fcvt等。在uC/OS-Ⅱ中使用這些函數(shù)時(shí)要小心,要避免兩個任務(wù)同時(shí)調(diào)用這些函數(shù),或者用信號量同步對這些函數(shù)的調(diào)用。+&i
© 第二,DOS是不能重入的,就是說正在調(diào)用DOS服務(wù)期間,是不能再次調(diào)用DOS的,如果又進(jìn)行了DOS調(diào)用,那么肯定會引起系統(tǒng)崩潰。uC/OS-Ⅱ啟動多任務(wù)后,如果兩個以上的任務(wù)進(jìn)行了DOS調(diào)用或者調(diào)用了需要DOS的C/C++運(yùn)行庫(如:printf、scanf等等),就有可能引起DOS重入。所以在uC/OS-Ⅱ中,可以調(diào)用BIOS或直接操縱硬件,但要盡量減少DOS調(diào)用。如果必須要用DOS,最好只有一個調(diào)用DOS的任務(wù),或者用信號量進(jìn)行同步。.
© uC/OS-Ⅱ作為一個源代碼公開的實(shí)時(shí)嵌入式內(nèi)核,對我們學(xué)習(xí)和使用實(shí)時(shí)操作系統(tǒng)提供了極大的幫助。而uC/OS-Ⅱ自身也因此獲得了快速的發(fā)展,許多開發(fā)者已經(jīng)成功地把uC/OS-Ⅱ應(yīng)用于自己的系統(tǒng)之中。隨著uC/OS-Ⅱ的不斷完善,它必將會有更加廣闊的應(yīng)用空間。[!--empirenews.page--]