引言
早在20世紀(jì)60年代,,就已經(jīng)有人開始研究和開發(fā)嵌入式操作系統(tǒng),。但直到最近,它才在國內(nèi)被越來越多的提及,,在通信,、電子、自動化等需要實時處理的領(lǐng)域所曰益顯現(xiàn)的重要性吸引了人們越來越多的注意力,。但是,,人們所談?wù)摰耐且恍┲纳虡I(yè)內(nèi)核,諸如VxWorks,、PSOS等,。這些商業(yè)內(nèi)核性能優(yōu)越,但價格昂貴,,主要用于16位和32位處理器中,,針對國內(nèi)大部分用戶使用的51系列8位單片機(jī),可以選擇免費的uCOS II" title="uCOS II">uCOS II,。
uCOS II的特點
1.uCOS II是由Labrosse先生編寫的一個開放式內(nèi)核,,最主要的特點就是源碼公開,。這一點對于用戶來說可謂利弊各半,好處在于,,一方面它是免費的,,另一方面用戶可以根據(jù)自己的需要對它進(jìn)行修改。缺點在于它缺乏必要的支持,,沒有功能強(qiáng)大的軟件包,,用戶通常需要自己編寫驅(qū)動程序,特別是如果用戶使用的是不太常用的單片機(jī),,還必須自己編寫移植程序,。
2.uCOS II是一個占先式的內(nèi)核,即已經(jīng)準(zhǔn)備就緒的高優(yōu)先級任務(wù)可以剝奪正在運行的低優(yōu)先級任務(wù)的CPU使用權(quán),。這個特點使得它的實時性比非占先式的內(nèi)核要好,。通常我們都是在中斷服務(wù)程序中使高優(yōu)先級任務(wù)進(jìn)入就緒態(tài)(例如發(fā)信號),這樣退出中斷服務(wù)程序后,,將進(jìn)行任務(wù)切換,,高優(yōu)先級任務(wù)將被執(zhí)行。拿51單片機(jī)為例,,比較一下就可以發(fā)現(xiàn)這樣做的好處,。假如需要用中斷方式采集一批數(shù)據(jù)并進(jìn)行處理,在傳統(tǒng)的編程方法中不能在中斷服務(wù)程序中進(jìn)行復(fù)雜的數(shù)據(jù)處理,,因為這會使得關(guān)中斷時間過長,。所以經(jīng)常采用的方法是置一標(biāo)志位,然后退出中斷,。由于主程序是循環(huán)執(zhí)行的,,所以它總有機(jī)會檢測到這一標(biāo)志并轉(zhuǎn)到數(shù)據(jù)處理程序中去。但是因為無法確定發(fā)生中斷時程序到底執(zhí)行到了什么地方,,也就無法判斷要經(jīng)過多長時間數(shù)據(jù)處理程序才會執(zhí)行,,中斷響應(yīng)時間無法確定,系統(tǒng)的實時性不強(qiáng),。如果使用μC/OS-II的話,,只要把數(shù)據(jù)處理程序的優(yōu)先級設(shè)定得高一些,并在中斷服務(wù)程序中使它進(jìn)入就緒態(tài),,中斷結(jié)束后數(shù)據(jù)處理程序就會被立即執(zhí)行,。這樣可以把中斷響應(yīng)時間限制在一定的范圍內(nèi)。對于一些對中斷響應(yīng)時間有嚴(yán)格要求的系統(tǒng),,這是必不可少的。但應(yīng)該指出的是如果數(shù)據(jù)處理程序簡單,,這樣做就未必合適,。因為uCOS II要求在中斷服務(wù)程序末尾使用OSINTEXIT函數(shù)以判斷是否進(jìn)行任務(wù)切換,,這需要花費一定的時間。
3.uCOS II和大家所熟知的Linux等分時操作系統(tǒng)不同,,它不支持時間片輪轉(zhuǎn)法,。uCOS II是一個基于優(yōu)先級的實時操作系統(tǒng),每個任務(wù)的優(yōu)先級必須不同,,分析它的源碼會發(fā)現(xiàn),,uCOS II把任務(wù)的優(yōu)先級當(dāng)做任務(wù)的標(biāo)識來使用,,如果優(yōu)先級相同,,任務(wù)將無法區(qū)分。進(jìn)入就緒態(tài)的優(yōu)先級最高的任務(wù)首先得到CPU的使用權(quán),,只有等它交出CPU的使用權(quán)后,,其他任務(wù)才可以被執(zhí)行。所以它只能說是多任務(wù),,不能說是多進(jìn)程,,至少不是我們所熟悉的那種多進(jìn)程。顯而易見,,如果只考慮實時性,,它當(dāng)然比分時系統(tǒng)好,它可以保證重要任務(wù)總是優(yōu)先占有CPU,。但是在系統(tǒng)中,,重要任務(wù)畢竟是有限的,這就使得劃分其他任務(wù)的優(yōu)先權(quán)變成了一個讓人費神的問題,。另外,,有些任務(wù)交替執(zhí)行反而對用戶更有利。例如,,用單片機(jī)控制兩小塊顯示屏?xí)r,,無論是編程者還是使用者肯定希望它們同時工作,而不是顯示完一塊顯示屏的信息以后再顯示另一塊顯示屏的信息,。這時候,,要是uCOS II即支持優(yōu)先級法又支持時間片輪轉(zhuǎn)法就更合適了。
4.uCOS II對共享資源提供了保護(hù)機(jī)制,。正如上文所提到的,,uCOS II是一個支持多任務(wù)的操作系統(tǒng)。一個完整的程序可以劃分成幾個任務(wù),,不同的任務(wù)執(zhí)行不同的功能,。這樣,一個任務(wù)就相當(dāng)于模塊化設(shè)計中的一個子模塊,。在任務(wù)中添加代碼時,,只要不是共享資源就不必?fù)?dān)心互相之間有影響,。而對于共享資源(比如串口),uCOS II也提供了很好的解決辦法,。一般情況下使用的是信號量的方法,。簡單地說,先創(chuàng)建一個信號量并對它進(jìn)行初始化,。當(dāng)一個任務(wù)需要使用一個共享資源時,,它必須先申請得到這個信號量,而一旦得到了此信號量,,那就只有等使用完了該資源,,信號量才會被釋放。在這個過程中即使有優(yōu)先權(quán)更高的任務(wù)進(jìn)入了就緒態(tài),,因為無法得到此信號量,,也不能使用該資源。這個特點的好處顯而易見,,例如當(dāng)顯示屏正在顯示信息的時候,,外部產(chǎn)生了一個中斷,而在中斷服務(wù)程序中需要顯示屏顯示其他信息,。這樣,,退出中斷服務(wù)程序后,原有的信息就可能被破壞了,。而在μC/OS-II中采用信號量的方法時,,只有顯示屏把原有信息顯示完畢后才可以顯示新信息,從而可以避免這個現(xiàn)象,。不過,,采用這種方法是以犧牲系統(tǒng)的實時性為代價的。如果顯示原有信息需要耗費大量時間,,系統(tǒng)只好等待,。從結(jié)果上看,等于延長了中斷響應(yīng)時間,,這對于未顯示信息是報警信息的情況,,無疑是致命的。發(fā)生這種情況,,在μC/OS-II中稱為優(yōu)先級反轉(zhuǎn),,就是高優(yōu)先級任務(wù)必須等待低優(yōu)先級任務(wù)的完成。在上述情況下,,在兩個任務(wù)之間發(fā)生優(yōu)先級反轉(zhuǎn)是無法避免的,。所以在使用uCOS II時,必須對所開發(fā)的系統(tǒng)了解清楚,,才能決定對于某種共享資源是否使用信號量,。
uCOS II在單片機(jī)使用中的一些特點
1.在單片機(jī)系統(tǒng)中嵌入uCOS II將增強(qiáng)系統(tǒng)的可靠性,,并使得調(diào)試程序變得簡單。以往傳統(tǒng)的單片機(jī)開發(fā)工作中經(jīng)常遇到程序跑飛或是陷入死循環(huán),??梢杂每撮T狗解決程序跑飛問題,而對于后一種情況,,尤其是其中牽扯到復(fù)雜數(shù)學(xué)計算的話,,只有設(shè)置斷點,耗費大量時間來慢慢分析,。如果在系統(tǒng)中嵌入 uCOS II的話,,事情就簡單多了??梢园颜麄€程序分成許多任務(wù),,每個任務(wù)相對獨立,然后在每個任務(wù)中設(shè)置超時函數(shù),,時間用完以后,任務(wù)必須交出 CPU的使用權(quán),。即使一個任務(wù)發(fā)生問題,,也不會影響其他任務(wù)的運行。這樣既提高了系統(tǒng)的可靠性,,同時也使得調(diào)試程序變得容易,。
2.在單片機(jī)系統(tǒng)中嵌入uCOS II將增加系統(tǒng)的開銷。現(xiàn)在所使用的51單片機(jī),,一般是指87C51或者89C51,,其片內(nèi)都帶有一定的RAM和 ROM。對于一些簡單的程序,,如果采用傳統(tǒng)的編程方法,,已經(jīng)不需要外擴(kuò)存儲器了。如果在其中嵌入uCOS II的話,,在只需要使用任務(wù)調(diào)度,、任務(wù)切換、信號量處理,、延時或超時服務(wù)的情況下,,也不需要外擴(kuò)ROM了,但是外擴(kuò)RAM是必須的,。由于uCOS II是可裁減的操作系統(tǒng),,其所需要的RAM大小就取決于操作系統(tǒng)功能的多少。舉例來說,,μC/OS-II允許用戶定義最大任務(wù)數(shù),。由于每建立一個任務(wù),,都要產(chǎn)生一個與之相對應(yīng)的數(shù)據(jù)結(jié)構(gòu)TCB,該數(shù)據(jù)結(jié)構(gòu)要占用很大一部分內(nèi)存空間,。所以在定義最大任務(wù)數(shù)時,,一定要考慮實際情況的需要。如果定得過大,,勢必會造成不必要的浪費,。嵌入uCOS II以后,總的RAM需求可以由如下表達(dá)式得出:
RAM總需求=應(yīng)用程序的RAM需求+內(nèi)核數(shù)據(jù)區(qū)的RAM需求+(任務(wù)棧需求+最大中斷嵌套棧需求)·任務(wù)數(shù)
所幸的是,,μC/OS-II可以對每個任務(wù)分別定義堆??臻g的大小,開發(fā)人員可根據(jù)任務(wù)的實際需求來進(jìn)行??臻g的分配,。但在RAM容量有限的情況下,還是應(yīng)該注意一下對大型數(shù)組,、數(shù)據(jù)結(jié)構(gòu)和函數(shù)的使用,,別忘了,函數(shù)的形參也是要推入堆棧的,。
3.uCOS II的移植也是一件需要值得注意的工作,。如果沒有現(xiàn)成的移植實例的話,就必須自己來編寫移植代碼,。雖然只需要改動兩個文件,,但仍需要對相應(yīng)的微處理器比較熟悉才行,最好參照已有的移植實例,。另外,,即使有移植實例,在編程前最好也要閱讀一下,,因為里面牽扯到堆棧操作,。在編寫中斷服務(wù)程序時,把寄存器推入堆棧的順序必須與移植代碼中的順序相對應(yīng),。
4.和其他一些著名的嵌入式操作系統(tǒng)不同,,uCOS II在單片機(jī)系統(tǒng)中的啟動過程比較簡單,不像有些操作系統(tǒng)那樣,,需要把內(nèi)核編譯成一個映像文件寫入ROM中,,上電復(fù)位后,再從ROM中把文件加載到RAM中去,,然后再運行應(yīng)用程序,。uCOS II的內(nèi)核是和應(yīng)用程序放在一起編譯成一個文件的,使用者只需要把這個文件轉(zhuǎn)換成HEX格式,寫入ROM中就可以了,,上電后,,會像普通的單片機(jī)程序一樣運行。
結(jié)語
由以上介紹可以看出,,uCOS II具有免費,、使用簡單、可靠性高,、實時性好等優(yōu)點,,但也有移植困難、缺乏必要的技術(shù)支持等缺點,,尤其不像商用嵌入式系統(tǒng)那樣得到廣泛使用和持續(xù)的研究更新,。但開放性又使得開發(fā)人員可以自行裁減和添加所需的功能,在許多應(yīng)用領(lǐng)域發(fā)揮著獨特的作用,。當(dāng)然,,是否在單片機(jī)系統(tǒng)中嵌入uCOS II應(yīng)視所開發(fā)的項目而定,對于一些簡單的,、低成本的項目來說,,就沒必要使用嵌入式操作系統(tǒng)了。