|
嵌入式linux培訓(xùn)多少錢_通過任務(wù)分割提高嵌入式系統(tǒng)的實(shí)時(shí)性,
通過任務(wù)分割提高嵌入式系統(tǒng)的實(shí)時(shí)性
引言
隨著工業(yè)的飛速發(fā)展,人們對系統(tǒng)實(shí)時(shí)性的要求越來越高。計(jì)算機(jī)技術(shù)的進(jìn)步客觀上也為進(jìn)一步提高實(shí)時(shí)性提供了可能。因此近年來,嵌入式實(shí)時(shí)系統(tǒng)的研究已經(jīng)成為單片同應(yīng)用領(lǐng)域的又一大熱點(diǎn),實(shí)編排軟件也越來越多,有商業(yè)軟件,也有免費(fèi)的代碼。然而影響系統(tǒng)實(shí)時(shí)性的因素很多,有硬件,也有軟件的。這就決定了提高系統(tǒng)的實(shí)時(shí)性并不是一件十分容易的事情,除了使用高性能的CPU和高效的實(shí)時(shí)內(nèi)核外,在實(shí)時(shí)系統(tǒng)應(yīng)用的過程中,還要結(jié)合具體情況進(jìn)行具體分析,充分利用CPU的效率,挖掘內(nèi)核的實(shí)時(shí)潛能。
1 任務(wù)與嵌入式多任務(wù)實(shí)時(shí)系統(tǒng)
1.1 任務(wù)與多任務(wù)
在嵌入式多任務(wù)實(shí)時(shí)系統(tǒng)時(shí),任務(wù)是指一個(gè)程序分段。這個(gè)分段被操作系統(tǒng)當(dāng)作一個(gè)基本單元來調(diào)度。
典型地,每個(gè)任務(wù)都是一個(gè)無限的循環(huán),而且在同一時(shí)刻只能處于以下5種狀態(tài)之一。這5種狀態(tài)是休眠態(tài)、就緒態(tài)、運(yùn)行態(tài)、等待態(tài)和被中斷態(tài),如圖1所示。
多任務(wù)系統(tǒng)的執(zhí)行過程實(shí)際上就是一系列任在這5種狀態(tài)中循環(huán)流動(dòng)、輪流被內(nèi)核調(diào)度的過程。多任務(wù)運(yùn)行使CPU的利用率得到最大的發(fā)揮,并使應(yīng)用程序模塊化。
1.2 嵌入式多任務(wù)實(shí)時(shí)系統(tǒng)
RTOS本質(zhì)上就是嵌入的實(shí)時(shí)內(nèi)核,它負(fù)責(zé)管理各個(gè)任務(wù),或者說是為每上任務(wù)分配CPU時(shí)間,并且負(fù)責(zé)任務(wù)之間的通信。實(shí)時(shí)內(nèi)核可分為可剝奪型和不同剝奪型兩類。因此,按照所使用內(nèi)核的不同,嵌入式實(shí)時(shí)系統(tǒng)也可分為兩類:使用不可剝奪型內(nèi)核的嵌入式實(shí)時(shí)系統(tǒng)和使用可剝奪型內(nèi)核的嵌入式實(shí)時(shí)系統(tǒng)。
2 實(shí)時(shí)系統(tǒng)中的長任務(wù)問題
2.1 長任務(wù)的定義
在RTOS中,長任務(wù)就是指整個(gè)任務(wù)的執(zhí)行時(shí)間較長,超出了RTOS中其它某一個(gè)或某幾個(gè)任務(wù)的實(shí)時(shí)要求容限,而對整個(gè)RTOS的實(shí)時(shí)性構(gòu)成威脅的那些任務(wù)。
2.2 長任務(wù)對RTOS的影響
當(dāng)使用可剝奪型實(shí)時(shí)內(nèi)核時(shí),長任務(wù)由于執(zhí)行的時(shí)間較長,因而更容易被高優(yōu)先級的任務(wù)打斷;一旦高優(yōu)先級的任務(wù)進(jìn)入了就緒態(tài),當(dāng)前任務(wù)的CPU使用權(quán)就被剝奪了,或者說任務(wù)被掛起了,那個(gè)高優(yōu)先級的任務(wù)立刻得到了CPU的控制權(quán)。這樣會(huì)出現(xiàn)兩個(gè)問題:一是長任務(wù)可能在一次執(zhí)行的過程中被頻敏打斷,長時(shí)間得不到一次完整的執(zhí)行;二是長任務(wù)被打斷時(shí),可能要保存大量的現(xiàn)場信息,其目的是為了保證在高優(yōu)先級的任務(wù)執(zhí)行完返回后,長任務(wù)能得以繼續(xù)執(zhí)行。然而,這樣做要占用一定的系統(tǒng)資源,同時(shí)保存現(xiàn)場本身也是要占用CPU時(shí)間的,因此,實(shí)時(shí)性也會(huì)下降。
當(dāng)使用不可剝奪型實(shí)時(shí)內(nèi)核時(shí),長任務(wù)對RTOS的影響更為明顯,因?yàn)樵谶@種內(nèi)核中,任務(wù)級響應(yīng)時(shí)間取決于最長的任務(wù)執(zhí)行時(shí)間。這也就是說由于長任務(wù)的存在,任務(wù)級的響應(yīng)時(shí)間要變長。其結(jié)果是CPU長時(shí)間停留在長任務(wù)中,其它的任務(wù)得不到實(shí)時(shí)的響應(yīng),甚至于根本得不到執(zhí)行,系統(tǒng)的實(shí)時(shí)性勢必要下降。
總之,無論是使用可剝奪型內(nèi)核,還是使用不可剝奪型內(nèi)核,長任務(wù)都會(huì)對RTOS構(gòu)成嚴(yán)重的威脅。
3 長任務(wù)問題的解決
解決長任務(wù)問題最有效的途徑是進(jìn)行任務(wù)分割。所謂任務(wù)分割指將影響系統(tǒng)實(shí)時(shí)性的長任務(wù)分割成若干個(gè)小任務(wù)。這樣單個(gè)任務(wù)的執(zhí)行時(shí)間變短,系統(tǒng)的任務(wù)級響應(yīng)時(shí)間變短,實(shí)時(shí)性提高。嵌入式UI界面, 嵌入式靈樹小波編碼, 蘭州510所嵌入式, 一級減速器嵌入式圖, arm期末嵌入式, 嵌入式c筆試編程題, 嵌入式智能大賽, 嵌入式linux月薪, 嵌入式網(wǎng)頁解決方案, 嵌入式和圖像處理, 嵌入式培養(yǎng)啥意思, 嵌入式系統(tǒng)使用類型, 31歲轉(zhuǎn)行嵌入式, 嵌入式主流cpu, 嵌入式板卡外設(shè), 嵌入式應(yīng)用工程, 在思必馳做嵌入式, 偉樂科技嵌入式, 博創(chuàng)嵌入式開發(fā)實(shí)驗(yàn)箱, 本科嵌入式就業(yè)前景,
3.1 對RTOS的分析與計(jì)算
當(dāng)然,長任務(wù)的分割必須結(jié)合系統(tǒng)中所使用的內(nèi)核,以及各任務(wù)對實(shí)時(shí)性的要求情況,進(jìn)行必要的分析計(jì)算,才能保證分割的合理性和有效懷,具體的步驟如下:
①分析系統(tǒng)共有多少個(gè)任務(wù),這些任務(wù)對實(shí)時(shí)性的要求有多高,求出各個(gè)任務(wù)所要求的最小執(zhí)行頻率f1,f2,f3……fn。
②計(jì)算目前各任務(wù)的實(shí)際執(zhí)行時(shí)間t1,t2,t3……tn。
③確定系統(tǒng)中的長任務(wù)
如果max(t1,t2,t3……tn)≤min(1/f1,1/f2,1/f3……1/fn)
則此系統(tǒng)中不存在長任務(wù)。
如果max(t1,t2,t3……tn)>min(1/f1,1/f2,1/f3……1/fn)
則存在長任務(wù),而且執(zhí)行時(shí)間為max(t1,t2,t3……tn)的那個(gè)任務(wù)就是要找的長任務(wù)。
④分析此長任務(wù)是否需要分割
分析一下是什么原因?qū)е聢?zhí)行的時(shí)間過長,這個(gè)時(shí)間還能夠通過程序的優(yōu)化來縮短?如果能,則不需要進(jìn)行任務(wù)分割;否則要對這個(gè)長任務(wù)進(jìn)行分割。
3.2 任務(wù)分割
常用的任務(wù)分割的方法有以下兩種:
①將長任務(wù)按功能分為若干個(gè)小模塊,每一個(gè)模塊構(gòu)成一個(gè)小任務(wù),每個(gè)小任務(wù)執(zhí)行一個(gè)相對獨(dú)立的功能,且要保證執(zhí)行時(shí)間t<min(1/f1,1/f2,1/f3……1/fn)。各個(gè)任務(wù)被內(nèi)核順序調(diào)用,合起來完成整個(gè)任務(wù)的功能。
②有的長任務(wù)比較特殊,例如鍵盤任務(wù)和動(dòng)態(tài) LED顯示任務(wù),很難按照方法1所說的把它分成若干個(gè)功能相對獨(dú)立的小模塊。這時(shí),一般是按照方便保存現(xiàn)場信息原則,強(qiáng)制將其分割成若干個(gè)小任務(wù),每個(gè)任務(wù)在min(1/f1,1/f2,1/f3……1/fn)時(shí)間內(nèi)主動(dòng)保存現(xiàn)場信息、放棄CPU的控制權(quán),等到再次被內(nèi)核調(diào)度時(shí)繼續(xù)執(zhí)行。
這種分割方法相對復(fù)雜,各任務(wù)之間界限不是很明顯,看似未經(jīng)分割,但實(shí)際上它確實(shí)是由多次任務(wù)中斷來完成。下面就以這種分割方法為例具體說明。
4 實(shí)例分析
4.1 系統(tǒng)介紹
在此,系統(tǒng)的硬件基礎(chǔ)是基于 MC68HC908GP32單片機(jī)系統(tǒng)的,用其普通I/O口作為矩陣式鍵盤的輸入輸出引腳;軟件基礎(chǔ)是在MC68HC908GP32中運(yùn)行 Motorola公司的Joanne Santangeli編寫的基于時(shí)間片的不可剝奪的實(shí)時(shí)內(nèi)核,如圖2所示。
此內(nèi)核主要是利用微控制器內(nèi)部的時(shí)間模塊產(chǎn)生恒定的實(shí)時(shí)中斷,將CPU的運(yùn)行時(shí)間分成一個(gè)個(gè)時(shí)間片。內(nèi)核的任務(wù)調(diào)度工作都是在時(shí)間片的開始階段完成的,而每個(gè)任務(wù)都必須在單個(gè)時(shí)間片內(nèi)完成。
在這個(gè)內(nèi)核中,每0.5ms發(fā)生1次時(shí)鐘中斷,而每10次時(shí)鐘中斷組成了1個(gè)時(shí)間片(5ms)。任務(wù)1的優(yōu) 先級最高,每2個(gè)時(shí)間片(10ms)會(huì)執(zhí)行1次,任務(wù)2每4個(gè)時(shí)間片(20ms)執(zhí)行1次,優(yōu)先級最低的任務(wù)6則每64個(gè)時(shí)間片(320ms)會(huì)執(zhí)行1次。
4.2 系統(tǒng)中的鍵盤任務(wù)問題
在單片機(jī)系統(tǒng)中,鍵盤主要用于輸入數(shù)據(jù)、代碼和命令,因此系統(tǒng)必須循環(huán)不停地掃描掃描;一是有鍵波按下,CPU立即做出響應(yīng)。鍵盤任務(wù)子程序也是根據(jù)這個(gè)要求而設(shè)計(jì)的。一般有兩種處理方式:一是中斷方式,二是查詢方式。從有鍵按下時(shí)開始,到按鍵釋放并轉(zhuǎn)相應(yīng)子程序而終止。該任務(wù)被內(nèi)核調(diào)度的情況如圖3所示。
圖3中,Δt是人手按鍵的時(shí)間,一般為100~300ms。為了能說明問題,這里取100ms。
令 t1\“-t1=Δt1,t2\“-t2=Δt2
則一次鍵盤任務(wù)的執(zhí)行時(shí)間
Δt\“=t\“2-t\“1=t2+(t\“2-t2)-[t1+(t\“1-t1)]=
t2+Δt2-t1-Δt1=
t2-t1+(Δt2+Δt1)=
Δt+(Δt2-Δt1)
由圖3可知
Δt1≤tms Δt2≤5ms
實(shí)際上,由于兩次任務(wù)執(zhí)行的情況不完全相同,Δt1與Δt2可能會(huì)有相當(dāng)于幾個(gè)指令周期的時(shí)間差異,但也只是μs級的誤差。而且,這里是以時(shí)間片的形式來計(jì)算的,所以依然可以認(rèn)為
Δt2-Δt1=0
因而有
Δt\“=Δt+(Δt2-Δt1)=Δt=100ms(20個(gè)時(shí)間片)
也就是說,在這20個(gè)時(shí)鐘片內(nèi)只執(zhí)行1次鍵盤任務(wù),大部分的時(shí)間都在空等待。在此期間,系統(tǒng)中會(huì)有20-1=19次其它任務(wù)的執(zhí)行被錯(cuò)過,圖3中虛線所示就是在此100ms期間被錯(cuò)過執(zhí)行的19個(gè)任務(wù)。顯然,這在大多數(shù)多任務(wù)系統(tǒng)中都是不允許的。
因此,在這個(gè)多任務(wù)實(shí)時(shí)系統(tǒng)中,鍵盤任務(wù)是個(gè)典型的長任務(wù),要使其它19次任務(wù)中斷都有被應(yīng)用的機(jī)會(huì),必須對該鍵盤任務(wù)進(jìn)行分割。
4.3 鍵盤任務(wù)的分割
鍵盤分割的方法是將一次鍵盤任務(wù)分成多個(gè)小任務(wù),通過多次任務(wù)中斷來完成。我們將其放在任務(wù)4中(80ms執(zhí)行1次)。這樣有ttask4≤ttask≤2ttask4,即可以保證鍵盤任務(wù)完整可靠地執(zhí)行,又提高了CPU的效率。圖4是分割后的鍵盤任務(wù)的執(zhí)行過程。
從圖4可以看出,1次完整的鍵盤任務(wù)是由2~3次任務(wù)中斷來完成的。情況a中,每一次任務(wù)中斷發(fā)生在ta1時(shí)刻,在接下來的一個(gè)時(shí)間片(5ms)內(nèi),檢測到有鍵按下,調(diào)用查詢值任務(wù);第一次任務(wù)中斷發(fā)生在ta2時(shí)刻,在接下來的一個(gè)時(shí)間片(5ms)內(nèi),檢測到按鍵已釋放,跳轉(zhuǎn)并執(zhí)行相應(yīng)鍵處理程序。
情況b中,第二次任務(wù)中斷時(shí)(tb2時(shí)刻),鍵還沒有松開,因此實(shí)際上什么也不做;第三次中斷(tb3時(shí)刻)才跳到與鍵值對應(yīng)的子程序。
通過這樣的分割,每個(gè)子任務(wù)都可以在5ms 內(nèi)完成。如果系統(tǒng)中還有大于5ms的長任務(wù)的話,可按此法繼續(xù)進(jìn)行分割;如果沒有的話,系統(tǒng)任務(wù)級響應(yīng)時(shí)間一定小于5ms。這樣,此系統(tǒng)的實(shí)時(shí)性大大提高,由100ms提高到5ms。本刊網(wǎng)絡(luò)補(bǔ)充版(http://www.dpj.com.cn)中,介紹了此任務(wù)改進(jìn)后的部分源程序。
結(jié)語
通過任務(wù)分割,可以顯著地提高多任務(wù)系統(tǒng)的實(shí)時(shí)性。本文改進(jìn)后的源程序已經(jīng)在基于MC68HC908GP32的溫室控制器中成功地運(yùn)行過。除此以外,還成功地對LED和SCI任務(wù)進(jìn)行了分割。改進(jìn)后,除了實(shí)時(shí)性大大提高外,CPU的執(zhí)行效率也有顯著提高。 |
|