|
本文檔以ARM9(三星 2410/2440)為平臺(tái),介紹一個(gè)多任務(wù)搶占式調(diào)度器------搶占式任務(wù)調(diào)度,提供延時(shí),掛起,恢復(fù)任務(wù)操作。最精簡(jiǎn)化,沒(méi)有加入信號(hào)量郵箱等同步通信機(jī)制。只實(shí)現(xiàn)一個(gè)基本任務(wù)調(diào)度器的功能。
雖然不能稱為操作系統(tǒng),但已體現(xiàn)了小型嵌入式操作系統(tǒng)的精髓。OS代碼不到1.5K,核心函數(shù)只有幾個(gè),思路簡(jiǎn)單明了。比起 UCOS,更適合用作多任務(wù)系統(tǒng)原理的學(xué)習(xí)入門(mén)。 對(duì)初學(xué)者來(lái)說(shuō),看UCOS的源代碼很容易迷糊。
回想初學(xué)嵌入式多任務(wù)系統(tǒng)時(shí),什么都不懂,Jean J.Labrosse 的經(jīng)典之作《嵌入式實(shí)時(shí)操作系統(tǒng) uc/osII》看得我一頭霧水。事實(shí)上,使我對(duì)多任務(wù)的原理印象最深的是網(wǎng)上的一篇文章----《建立一個(gè)屬于自己的AVR的 RTOS》 。
學(xué)習(xí)就應(yīng)該這樣,循序漸進(jìn)。把一步步把簡(jiǎn)單的東西弄懂了,便沒(méi)有復(fù)雜的了,所謂水到渠成。
這篇文章是面對(duì)初學(xué)者的,把很多問(wèn)題簡(jiǎn)化了。希望對(duì)剛接觸嵌入式多任務(wù)系統(tǒng)的兄弟有所幫助。
必定存在不少 bug,歡迎指正。
什么是多任務(wù)系統(tǒng)?
就像我們用電腦時(shí)可以同時(shí)聽(tīng)歌,上網(wǎng),編輯文檔等。在多任務(wù)系統(tǒng)中,可以同時(shí)執(zhí)行多個(gè)并行任務(wù),各個(gè)任務(wù)之間互相獨(dú)立。通過(guò)操作系統(tǒng)執(zhí)行任務(wù)調(diào)度而實(shí)現(xiàn)宏觀上的“并發(fā)運(yùn)行” 。從宏觀上不同的任務(wù)并發(fā)運(yùn)行,好像每個(gè)任務(wù)都有自己的 CPU一樣。
其實(shí)在單一CPU的情況下,是不存在真正的多任務(wù)機(jī)制的,存在的只有不同的任務(wù)輪流使用CPU,所以本質(zhì)上還是單任務(wù)的。但由于 CPU 執(zhí)行速度非常快,加上任務(wù)切換十分頻繁并且切換的很快,所以我們感覺(jué)好像有很多任務(wù)同時(shí)在運(yùn)行一樣。這就是所謂的多任務(wù)機(jī)制。
多任務(wù)的最大好處是充分利用硬件資源,如在單任務(wù)時(shí)(大循環(huán)結(jié)構(gòu),如大部分 51程序)遇到 delay函數(shù)時(shí),CPU在空轉(zhuǎn);而在多任務(wù)系統(tǒng),遇到 delay或需等待資源時(shí)系統(tǒng)會(huì)自動(dòng)運(yùn)行下一個(gè)任務(wù),等條件滿足再回來(lái)運(yùn)行先前的任務(wù),這樣就充分利用了 CPU,提高了效率。
任務(wù)有下面的特性:
l 動(dòng)態(tài)性。任務(wù)并不是隨時(shí)都可以運(yùn)行的,而一個(gè)已經(jīng)運(yùn)行的任務(wù)并不能保證一直占有CPU直到運(yùn)行完。一般有就緒態(tài),運(yùn)行態(tài),掛起態(tài)等。
運(yùn)行態(tài)。一個(gè)運(yùn)行態(tài)的任務(wù)是一個(gè)正在使用 CPU的任務(wù)。任何時(shí)刻有且只有一個(gè)運(yùn)行著的任務(wù)。
就緒態(tài)。一個(gè)就緒態(tài)任務(wù)是可運(yùn)行的,等待占有 CPU的任務(wù)釋放 CPU。
掛起態(tài)。某些條件不滿足而掛起不能運(yùn)行的狀態(tài)。
|
評(píng)分
-
查看全部評(píng)分
|