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