23.1 操作系統(tǒng)概述
之前的實驗都是利用單片機實現(xiàn)某個單一功能,但是有時候需要在兩個功能同時運行,這時就需要引入操作系統(tǒng)的概念,操作系統(tǒng)(Operating System,簡稱OS)是一種管理電腦硬件與軟件資源的程序,同時也是計算機系統(tǒng)的內(nèi)核與基礎(chǔ),操作系統(tǒng)大致包括5種功能:進程管理,作業(yè)管理,存儲管理,設(shè)備管理與文件管理。
23.1.1 操作系統(tǒng)分類
操作系統(tǒng)有三種基本類型:多道程序系統(tǒng),分時系統(tǒng),實時系統(tǒng),最初操作系統(tǒng)是不支持這種微型單片機的運行的,隨著科技的發(fā)展才產(chǎn)生了針對于這種M系列內(nèi)核的嵌入式操作系統(tǒng),常見的嵌入式操作系統(tǒng)有FreeeRTOS,uCos,uC-Linux(一種Linux精簡版本),在STM32中一般運用FreeRTOS和uCos這兩種系統(tǒng),Linux由于必須有內(nèi)存才能運行,一般Linux系統(tǒng)需要大約200M的存儲空間才能裝下,我們這里采用uCos-II系統(tǒng)為例來進行嵌入式操作系統(tǒng)的移植實驗。
23.1.2 uCOS簡介
uCos系統(tǒng)最早出自于1992年美國嵌入式專家Jean J.Labrosse發(fā)表在《嵌入式系統(tǒng)編程》上的,并在該雜志的BBS上發(fā)布了源碼,發(fā)展到現(xiàn)在uCos-III已經(jīng)出來,但是目前使用最廣泛的還是uCos-II,本單元我們采用uCos-II來進行介紹。
uCos-II是一個可以基于ROM運行的,可裁剪的,搶占式,實時多任務(wù)內(nèi)核,采用C語言進行編寫,這是一種專門為計算機的嵌入式應(yīng)用設(shè)計的,CPU硬件相關(guān)部分采用匯編語言編寫,執(zhí)行效率高,占用空間小,最小內(nèi)核可編譯至2Kbyte,uCos-II體系結(jié)構(gòu)如下圖所示。
從上圖可以發(fā)現(xiàn),我們移植系統(tǒng)的時候,只需要修改os_cpu.h,os_cpu_a.asm和os_cpu.c等三個文件即可,其中其中:os_cpu.h,進行數(shù)據(jù)類型的定義,以及處理器相關(guān)代碼和幾個函數(shù)原型;os_cpu_a.asm,是移植過程中需要匯編完成的一些函數(shù),主要就是任務(wù)切換函數(shù);os_cpu.c,定義一些用戶HOOK函數(shù)。
圖中定時器的作用是為UCOS-II提供系統(tǒng)時鐘節(jié)拍,實現(xiàn)任務(wù)切換和任務(wù)延時等功能。這個時鐘節(jié)拍由OS_TICKS_PER_SEC(在os_cfg.h中定義)設(shè)置,一般我們設(shè)置uCos-II的系統(tǒng)時鐘節(jié)拍為1ms~100ms,具體根據(jù)你所用處理器和使用需要來設(shè)置。我們利用STM32F1的SYSTICK定時器來提供UCOS-II時鐘節(jié)拍。
uCos-II早期版本只支持64個任務(wù),但是從2.80版本開始,支持任務(wù)數(shù)提高到255個,不過對我們來說一般64個任務(wù)都是足夠多了,一般很難用到這么多個任務(wù)。uCos-II保留了最高4個優(yōu)先級和最低4個優(yōu)先級的總共8個任務(wù),用于拓展使用,但實際上,uCos-II一般只占用了最低2個優(yōu)先級,分別用于空閑任務(wù)(倒數(shù)第一)和統(tǒng)計任務(wù)(倒數(shù)第二),所以剩下給我們使用的任務(wù)最多可達255-2=253個(V2.91)。
所謂的任務(wù),其實就是一個死循環(huán)函數(shù),該函數(shù)實現(xiàn)一定的功能,一個工程可以有很多這樣的任務(wù)(最多255個),uCos-II對這些任務(wù)進行調(diào)度管理,讓這些任務(wù)可以并發(fā)工作(不是同時工作,并發(fā)只是各任務(wù)輪流占用CPU,而不是同時占用,任何時候還是只有1個任務(wù)能夠占用CPU),這就是uCos-II最基本的功能。
uCos-II的任何任務(wù)都是通過一個叫任務(wù)控制塊(TCB)的東西來控制的,每個任務(wù)管理塊有3個最重要的參數(shù):1,任務(wù)函數(shù)指針;2,任務(wù)堆棧指針;3,任務(wù)優(yōu)先級;任務(wù)控制塊就是任務(wù)在系統(tǒng)里面的身份證(uCos-II通過優(yōu)先級識別任務(wù))
在uCos-II中,使用CPU的時候,優(yōu)先級高(數(shù)值小)的任務(wù)比優(yōu)先級低的任務(wù)具有優(yōu)先使用權(quán),即任務(wù)就緒表中總是優(yōu)先級最高的任務(wù)獲得CPU使用權(quán),只有高優(yōu)先級的任務(wù)讓出CPU使用權(quán)(比如延時)時,低優(yōu)先級的任務(wù)才能獲得CPU使用權(quán)。uCos-II不支持多個任務(wù)優(yōu)先級相同,也就是每個任務(wù)的優(yōu)先級必須不一樣。任務(wù)的調(diào)度其實就是CPU運行環(huán)境的切換
uCos-II的每個任務(wù)都是一個死循環(huán)。每個任務(wù)都處在以下5種狀態(tài)之一的狀態(tài)下,這5種狀態(tài)是:睡眠狀態(tài)、就緒狀態(tài)、運行狀態(tài)、等待狀態(tài)(等待某一事件發(fā)生)和中斷服務(wù)狀態(tài)。
(1)睡眠狀態(tài):任務(wù)在沒有被配備任務(wù)控制塊或被剝奪了任務(wù)控制塊時的狀態(tài)。
(2)就緒狀態(tài):系統(tǒng)為任務(wù)配備了任務(wù)控制塊且在任務(wù)就緒表中進行了就緒登記,任務(wù)已經(jīng)準備好了,但由于該任務(wù)的優(yōu)先級比正在運行的任務(wù)的優(yōu)先級低,還暫時不能運行,這時任務(wù)的狀態(tài)叫做就緒狀態(tài)。
(3)運行狀態(tài):該任務(wù)獲得CPU使用權(quán),并正在運行中,此時的任務(wù)狀態(tài)叫做運行狀態(tài)。
(4)等待狀態(tài):正在運行的任務(wù),需要等待一段時間或需要等待一個事件發(fā)生再運行時,該任務(wù)就會把CPU的使用權(quán)讓給別的任務(wù)而使任務(wù)進入等待狀態(tài)。
(5)中斷服務(wù)狀態(tài):一個正在運行的任務(wù)一旦響應(yīng)中斷申請就會中止運行而去執(zhí)行中斷服務(wù)程序,這時任務(wù)的狀態(tài)叫做中斷服務(wù)狀態(tài)。
uCos-II任務(wù)的5個狀態(tài)轉(zhuǎn)換關(guān)系如圖
23.1.3 uCOS-II中與任務(wù)相關(guān)的函數(shù)
(1)創(chuàng)建進程:OSTaskCreate
函數(shù)原型:OSTaskCreate( void( *task )( void *pd ), void *pdata, OS_STK *ptos, INTU prio )
函數(shù)參數(shù):
task:指向任務(wù)代碼的指針
pdata:任務(wù)開始執(zhí)行時,傳遞給任務(wù)的參數(shù)的指針
ptos:分配給任務(wù)的堆棧的棧頂指針
prio:分配給任務(wù)的優(yōu)先級
每個任務(wù)都有自己的堆棧,堆棧必須申明為OS_STK類型,并且由連續(xù)的內(nèi)存空間組成??梢造o態(tài)分配堆??臻g,也可以動態(tài)分配堆??臻g。
(2)刪除進程
函數(shù)原型:INT8U OSTaskDel( INT8U prio )
函數(shù)參數(shù):
prio:進程的優(yōu)先級,該函數(shù)是通過任務(wù)優(yōu)先級來實現(xiàn)任務(wù)刪除的
(3)請求刪除進程
函數(shù)原型:INT8U OSTaskDelReq( INT8U prio )
函數(shù)參數(shù):
prio:進程的優(yōu)先級
(4)修改進程優(yōu)先級
函數(shù)原型:INT8U OSTaskChangePrio( INT8U oldprio, INT8U newprio )
函數(shù)參數(shù):
oldprio:進程的源優(yōu)先級
newprio:進程的新優(yōu)先級
(5)進程掛起
函數(shù)原型:INT8U OSTaskSuspend( INT8U prio )
函數(shù)參數(shù):
prio:進程的優(yōu)先級
任務(wù)掛起和任務(wù)刪除有點類似,任務(wù)掛起只是將被掛起任務(wù)的就緒標志刪除,并做任務(wù)掛起記錄,并沒有將任務(wù)控制塊任務(wù)控制塊鏈表里面刪除,也不需要釋放其資源,而任務(wù)刪除則必須先釋放被刪除任務(wù)的資源,并將被刪除任務(wù)的任務(wù)控制塊也給刪了。被掛起的任務(wù),在恢復(fù)后可以繼續(xù)運行。
(6)恢復(fù)進程
函數(shù)原型:INT8U OSTaskResume( INT8U prio )
函數(shù)參數(shù):
prio:進程的優(yōu)先級
-
單片機
+關(guān)注
關(guān)注
6037文章
44558瀏覽量
635407 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6827瀏覽量
123335 -
uCOS-Ⅱ
+關(guān)注
關(guān)注
0文章
9瀏覽量
8588
發(fā)布評論請先 登錄
相關(guān)推薦
評論