通過任務分割提高嵌入式系統(tǒng)的實時性
3.1 對RTOS的分析與計算
當然,長任務的分割必須結(jié)合系統(tǒng)中所使用的內(nèi)核,以及各任務對實時性的要求情況,進行必要的分析計算,才能保證分割的合理性和有效懷,具體的步驟如下:
①分析系統(tǒng)共有多少個任務,這些任務對實時性的要求有多高,求出各個任務所要求的最小執(zhí)行頻率f1,f2,f3……fn。
②計算目前各任務的實際執(zhí)行時間t1,t2,t3……tn。
③確定系統(tǒng)中的長任務
如果max(t1,t2,t3……tn)≤min(1/f1,1/f2,1/f3……1/fn)
則此系統(tǒng)中不存在長任務。
如果max(t1,t2,t3……tn)>min(1/f1,1/f2,1/f3……1/fn)
則存在長任務,而且執(zhí)行時間為max(t1,t2,t3……tn)的那個任務就是要找的長任務。
④分析此長任務是否需要分割
分析一下是什么原因?qū)е聢?zhí)行的時間過長,這個時間還能夠通過程序的優(yōu)化來縮短?如果能,則不需要進行任務分割;否則要對這個長任務進行分割。
3.2 任務分割
常用的任務分割的方法有以下兩種:
①將長任務按功能分為若干個小模塊,每一個模塊構(gòu)成一個小任務,每個小任務執(zhí)行一個相對獨立的功能,且要保證執(zhí)行時間tmin(1/f1,1/f2,1/f3……1/fn)。各個任務被內(nèi)核順序調(diào)用,合起來完成整個任務的功能。
②有的長任務比較特殊,例如鍵盤任務和動態(tài) LED顯示任務,很難按照方法1所說的把它分成若干個功能相對獨立的小模塊。這時,一般是按照方便保存現(xiàn)場信息原則,強制將其分割成若干個小任務,每個任務在min(1/f1,1/f2,1/f3……1/fn)時間內(nèi)主動保存現(xiàn)場信息、放棄CPU的控制權(quán),等到再次被內(nèi)核調(diào)度時繼續(xù)執(zhí)行。
這種分割方法相對復雜,各任務之間界限不是很明顯,看似未經(jīng)分割,但實際上它確實是由多次任務中斷來完成。下面就以這種分割方法為例具體說明。
4 實例分析
4.1 系統(tǒng)介紹
在此,系統(tǒng)的硬件基礎是基于 MC68HC908GP32單片機系統(tǒng)的,用其普通I/O口作為矩陣式鍵盤的輸入輸出引腳;軟件基礎是在MC68HC908GP32中運行 Motorola公司的Joanne Santangeli編寫的基于時間片的不可剝奪的實時內(nèi)核,如圖2所示。
此內(nèi)核主要是利用微控制器內(nèi)部的時間模塊產(chǎn)生恒定的實時中斷,將CPU的運行時間分成一個個時間片。內(nèi)核的任務調(diào)度工作都是在時間片的開始階段完成的,而每個任務都必須在單個時間片內(nèi)完成。
在這個內(nèi)核中,每0.5ms發(fā)生1次時鐘中斷,而每10次時鐘中斷組成了1個時間片(5ms)。任務1的優(yōu) 先級最高,每2個時間片(10ms)會執(zhí)行1次,任務2每4個時間片(20ms)執(zhí)行1次,優(yōu)先級最低的任務6則每64個時間片(320ms)會執(zhí)行1次。
4.2 系統(tǒng)中的鍵盤任務問題
在單片機系統(tǒng)中,鍵盤主要用于輸入數(shù)據(jù)、代碼和命令,因此系統(tǒng)必須循環(huán)不停地掃描掃描;一是有鍵波按下,CPU立即做出響應。鍵盤任務子程序也是根據(jù)這個要求而設計的。一般有兩種處理方式:一是中斷方式,二是查詢方式。從有鍵按下時開始,到按鍵釋放并轉(zhuǎn)相應子程序而終止。該任務被內(nèi)核調(diào)度的情況如圖3所示。 linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論