一種嵌入式系統(tǒng)的多任務(wù)調(diào)度方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及任務(wù)調(diào)度技術(shù)領(lǐng)域,具體涉及一種嵌入式系統(tǒng)的多任務(wù)調(diào)度方法及系 統(tǒng)。
【背景技術(shù)】
[0002] LNG加氣機(jī)電控系統(tǒng)中,嵌入式系統(tǒng)任務(wù)多,功能繁多,需要操作系統(tǒng)對(duì)多任務(wù)的 管理,但同時(shí)對(duì)實(shí)時(shí)性要求高,如果嵌入式系統(tǒng)加載操作系統(tǒng)進(jìn)行軟件功能開發(fā),勢(shì)必會(huì)降 低嵌入式系統(tǒng)的實(shí)時(shí)性,也增加了程序的復(fù)雜度。
【發(fā)明內(nèi)容】
[0003] 本發(fā)明所要解決的技術(shù)問題是提供一種嵌入式系統(tǒng)的多任務(wù)調(diào)度方法及系統(tǒng),在 不采用嵌入式操作系統(tǒng)的前提下,能夠?qū)崿F(xiàn)對(duì)多任務(wù)進(jìn)行高效率的調(diào)度,實(shí)現(xiàn)搶占式的任 務(wù)切換。
[0004] 本發(fā)明解決上述技術(shù)問題的技術(shù)方案如下:
[0005] 一方面,提供了一種嵌入式系統(tǒng)的多任務(wù)調(diào)度方法,所述方法包括:
[0006] 按照實(shí)時(shí)性要求將嵌入式系統(tǒng)任務(wù)劃分為強(qiáng)實(shí)時(shí)性任務(wù)、中實(shí)時(shí)性任務(wù)、弱實(shí)時(shí) 性任務(wù)和無實(shí)時(shí)性任務(wù);
[0007] 對(duì)所述強(qiáng)實(shí)時(shí)性任務(wù)采用硬件中斷的方式進(jìn)行任務(wù)調(diào)度和搶占;
[0008] 對(duì)所述中實(shí)時(shí)性任務(wù)和弱實(shí)時(shí)性任務(wù)采用具有不同調(diào)度周期和不同中斷優(yōu)先級(jí) 的定時(shí)器中斷的方式進(jìn)行任務(wù)調(diào)度;
[0009] 對(duì)所述無實(shí)時(shí)性任務(wù)按照對(duì)應(yīng)程序的執(zhí)行順序進(jìn)行任務(wù)輪詢。
[0010] 另一方面,提供了一種嵌入式系統(tǒng)的多任務(wù)調(diào)度系統(tǒng),所述系統(tǒng)包括:
[0011] 任務(wù)劃分模塊,用于按照實(shí)時(shí)性要求將嵌入式系統(tǒng)任務(wù)劃分為強(qiáng)實(shí)時(shí)性任務(wù)、中 實(shí)時(shí)性任務(wù)、弱實(shí)時(shí)性任務(wù)和無實(shí)時(shí)性任務(wù);
[0012] 第一任務(wù)調(diào)度模塊,用于對(duì)所述強(qiáng)實(shí)時(shí)性任務(wù)采用硬件中斷的方式進(jìn)行任務(wù)調(diào)度 和搶占;
[0013] 第二任務(wù)調(diào)度模塊,用于對(duì)所述中實(shí)時(shí)性任務(wù)和弱實(shí)時(shí)性任務(wù)采用具有不同調(diào)度 周期和不同中斷優(yōu)先級(jí)的定時(shí)器中斷的方式進(jìn)行任務(wù)調(diào)度;
[0014] 第三任務(wù)調(diào)度模塊,用于對(duì)所述無實(shí)時(shí)性任務(wù)按照對(duì)應(yīng)程序的執(zhí)行順序進(jìn)行任務(wù) 輪詢。
[0015] 本發(fā)明提供的一種嵌入式系統(tǒng)的多任務(wù)調(diào)度方法及系統(tǒng),將嵌入式系統(tǒng)中的任務(wù) 分為強(qiáng)實(shí)時(shí)性任務(wù)、中實(shí)時(shí)性任務(wù)、弱實(shí)時(shí)性任務(wù)和無實(shí)時(shí)性任務(wù),對(duì)強(qiáng)實(shí)時(shí)性任務(wù)采用硬 件中斷的方式進(jìn)行任務(wù)調(diào)度,而對(duì)于中實(shí)時(shí)性任務(wù)和弱實(shí)時(shí)性任務(wù)則采用不同調(diào)度周期的 定時(shí)器中斷的方式進(jìn)行任務(wù)調(diào)度,將嵌入式系統(tǒng)中的任務(wù)分層設(shè)計(jì),實(shí)現(xiàn)了不同實(shí)時(shí)性任 務(wù)的調(diào)度機(jī)制,在不采用嵌入式操作系統(tǒng)的前提下,能夠?qū)崿F(xiàn)對(duì)復(fù)雜的、多任務(wù)進(jìn)行高效的 調(diào)度,且能夠采用定時(shí)器刷新周期實(shí)現(xiàn)搶占式任務(wù)調(diào)度和切換,降低了程序的復(fù)雜性、增加 了代碼的健壯性和可移植性。
【附圖說明】
[0016] 圖1為本發(fā)明實(shí)施例一的一種嵌入式系統(tǒng)的多任務(wù)調(diào)度方法流程圖;
[0017] 圖2為本發(fā)明實(shí)施例二的一種嵌入式系統(tǒng)的多任務(wù)調(diào)度系統(tǒng)示意圖。
【具體實(shí)施方式】
[0018] 以下結(jié)合附圖對(duì)本發(fā)明的原理和特征進(jìn)行描述,所舉實(shí)例只用于解釋本發(fā)明,并 非用于限定本發(fā)明的范圍。
[0019] 實(shí)施例一、一種嵌入式系統(tǒng)的多任務(wù)調(diào)度方法。下面結(jié)合圖1對(duì)本實(shí)施例提供的 系統(tǒng)進(jìn)行詳細(xì)說明。
[0020] 參見圖1,S101、按照實(shí)時(shí)性要求將嵌入式系統(tǒng)任務(wù)劃分為強(qiáng)實(shí)時(shí)性任務(wù)、中實(shí)時(shí) 性任務(wù)、弱實(shí)時(shí)性任務(wù)和無實(shí)時(shí)性任務(wù)。
[0021] 具體的,在LNG加氣機(jī)電控系統(tǒng)中,將嵌入式系統(tǒng)中的任務(wù)按照實(shí)時(shí)性要求分為 強(qiáng)實(shí)時(shí)性任務(wù)、中實(shí)時(shí)性任務(wù)、弱實(shí)時(shí)性任務(wù)和無實(shí)時(shí)性任務(wù)。其中,各種實(shí)時(shí)性任務(wù)包含 有多個(gè)任務(wù),比如,嵌入式系統(tǒng)的任務(wù)中總共包含27個(gè),強(qiáng)實(shí)時(shí)性任務(wù)有5個(gè),中實(shí)時(shí)性任 務(wù)有10個(gè),弱實(shí)時(shí)性任務(wù)有7個(gè),無實(shí)時(shí)性任務(wù)有5個(gè),可以參見表1。
[0022]表 1 [0023]
[0024]
[0025] S102、對(duì)強(qiáng)實(shí)時(shí)性任務(wù)采用硬件中斷的方式進(jìn)行任務(wù)調(diào)度。
[0026] 具體的,上述步驟SlOl對(duì)嵌入式系統(tǒng)中的任務(wù)按實(shí)時(shí)性要求進(jìn)行了劃分,其中, 強(qiáng)實(shí)時(shí)性任務(wù)包含多個(gè)任務(wù),此步驟對(duì)強(qiáng)實(shí)時(shí)性任務(wù)中的任務(wù)建立優(yōu)先級(jí),組成強(qiáng)實(shí)時(shí)性 任務(wù)隊(duì)列,隨后按照任務(wù)的優(yōu)先級(jí)采用硬件中斷的方式進(jìn)行任務(wù)調(diào)度和搶占,比如,采用如 上表1的外部中斷或串口中斷的方式進(jìn)行強(qiáng)實(shí)時(shí)性任務(wù)的調(diào)度。
[0027] S103、對(duì)中實(shí)時(shí)性任務(wù)和弱實(shí)時(shí)性任務(wù)采用具有不同調(diào)度周期和不同中斷優(yōu)先級(jí) 的定時(shí)器中斷的方式進(jìn)行任務(wù)調(diào)度。
[0028] 具體的,本實(shí)施例對(duì)中實(shí)時(shí)性任務(wù)和對(duì)弱實(shí)時(shí)性任務(wù)的任務(wù)調(diào)度機(jī)制是相同的, 均是采用一定調(diào)度周期的定時(shí)器中斷的方式進(jìn)行任務(wù)調(diào)度,只是中實(shí)時(shí)性任務(wù)對(duì)應(yīng)的定時(shí) 器和弱實(shí)時(shí)性任務(wù)對(duì)應(yīng)的定時(shí)器的調(diào)度周期不同,且兩個(gè)定時(shí)器中斷的優(yōu)先級(jí)不同。本實(shí) 施例中的中實(shí)時(shí)性任務(wù)/弱實(shí)時(shí)性任務(wù)包含有多個(gè)任務(wù),對(duì)中實(shí)時(shí)性任務(wù)/弱實(shí)時(shí)性任務(wù) 設(shè)定調(diào)度周期,并指定中實(shí)時(shí)性任務(wù)/弱實(shí)時(shí)性任務(wù)中的各個(gè)任務(wù)的任務(wù)標(biāo)識(shí)(比如,任務(wù) 的名稱或任務(wù)的變量號(hào))和任務(wù)延遲數(shù),組成中實(shí)時(shí)性任務(wù)/弱實(shí)時(shí)性任務(wù)隊(duì)列。需要說 明的是,中實(shí)時(shí)性任務(wù)隊(duì)列對(duì)應(yīng)的定時(shí)器中斷的優(yōu)先級(jí)高于弱實(shí)時(shí)性任務(wù)隊(duì)列對(duì)應(yīng)的定時(shí) 器中斷。本實(shí)施例可以按照下述程序代碼對(duì)中實(shí)時(shí)性任務(wù)和弱實(shí)時(shí)性任務(wù)進(jìn)行初始化:
[0029]
[0030] 與中實(shí)時(shí)性任務(wù)/弱實(shí)時(shí)性任務(wù)對(duì)應(yīng)的定時(shí)器中斷對(duì)中實(shí)時(shí)性任務(wù)隊(duì)列/弱實(shí)時(shí) 性任務(wù)隊(duì)列進(jìn)行周期刷新調(diào)度。比如,如上表1,采用定時(shí)器中斷1對(duì)中實(shí)時(shí)性任務(wù)中的各 個(gè)任務(wù)進(jìn)行調(diào)度,定時(shí)器中斷1的調(diào)度周期為IOms ;采用定時(shí)器中斷2對(duì)弱實(shí)時(shí)性任務(wù)中 的各個(gè)任務(wù)進(jìn)行調(diào)度,定時(shí)器中斷2的調(diào)度周期為100ms。
[0031] 在對(duì)中實(shí)時(shí)性任務(wù)隊(duì)列和弱實(shí)時(shí)性任務(wù)隊(duì)列進(jìn)行任務(wù)調(diào)度的過程中,可以參見下 述程序代碼:
[0032]
[0034] AllTask_Runl () ;//根據(jù)中實(shí)時(shí)性任務(wù)中斷函數(shù)刷新結(jié)果,刷新運(yùn)行中實(shí)時(shí)性任 務(wù)隊(duì)列1里需要運(yùn)行的任務(wù)AllTask_Run2〇 ;//根據(jù)弱實(shí)時(shí)性任務(wù)中斷函數(shù)刷新結(jié)果,刷 新運(yùn)行弱實(shí)時(shí)性任務(wù)隊(duì)列2中需要運(yùn)行的任務(wù),將弱實(shí)時(shí)標(biāo)志置I ;
[0035] 在定時(shí)器中斷1對(duì)中實(shí)時(shí)性任務(wù)隊(duì)列或定時(shí)器中斷2對(duì)弱實(shí)時(shí)性任務(wù)隊(duì)列進(jìn)行調(diào) 度的過程中,定時(shí)器中斷1或定時(shí)器中斷2按照任務(wù)隊(duì)列中的各個(gè)任務(wù)的任務(wù)延遲數(shù)或?qū)?應(yīng)程序的執(zhí)行順序進(jìn)行周期刷新調(diào)度。以中實(shí)時(shí)性任務(wù)隊(duì)列的調(diào)度為例,如表1,中實(shí)時(shí)性 任務(wù)隊(duì)列中優(yōu)先級(jí)為6的任務(wù)的延遲數(shù)為20 (定時(shí)器中斷1的調(diào)度周期為IOms),而其它任 務(wù)的延遲數(shù)均為50,則定時(shí)器中斷1進(jìn)行周期刷新調(diào)度時(shí),首先會(huì)刷新到延遲數(shù)為20的任 務(wù),隨后才刷新到延遲數(shù)為50的任務(wù),因此,在中實(shí)時(shí)性任務(wù)隊(duì)列中,先在刷新函數(shù)中執(zhí)行 延遲數(shù)為20的任務(wù),然后執(zhí)行延遲數(shù)為50的任務(wù)。而對(duì)于延遲數(shù)均為50的各個(gè)任務(wù),則 按照各任務(wù)在對(duì)應(yīng)程序中的執(zhí)行順序進(jìn)行執(zhí)行。同樣,弱實(shí)時(shí)性任務(wù)隊(duì)列中的各個(gè)任務(wù)的 執(zhí)行順序與中實(shí)時(shí)性任務(wù)隊(duì)列的執(zhí)行順序遵循相同的原則。
[0036] 另外,中實(shí)時(shí)性任務(wù)隊(duì)列與弱實(shí)時(shí)性任務(wù)隊(duì)列之間的任務(wù)執(zhí)行順序的具體實(shí)現(xiàn)過 程:以上述表1中的任務(wù)為例,若弱實(shí)時(shí)性任務(wù)隊(duì)列中的優(yōu)先級(jí)為16的任務(wù)已經(jīng)在執(zhí)行或 者即將執(zhí)行(或者還在定時(shí)器中斷2中沒有返回),此時(shí)定時(shí)器中斷1發(fā)生,由于定時(shí)器中 斷1的中斷優(yōu)先級(jí)要高于定時(shí)器中斷2的中斷優(yōu)先級(jí),則程序執(zhí)行定時(shí)器中斷1,在定時(shí)器 中斷1中,刷新到中實(shí)時(shí)性任務(wù)隊(duì)列中的優(yōu)先級(jí)為7的任務(wù)需要執(zhí)行,而此時(shí)檢測(cè)弱實(shí)時(shí)性 任務(wù)隊(duì)列中有弱實(shí)時(shí)任務(wù)標(biāo)志為1 (即有優(yōu)先級(jí)為16的任務(wù)正在或者將要運(yùn)行),則在定時(shí) 器中斷1中執(zhí)行優(yōu)先級(jí)為7的中實(shí)時(shí)性任務(wù),隨后再跳出函數(shù),去繼續(xù)執(zhí)行優(yōu)先級(jí)為16的 弱實(shí)時(shí)性任務(wù),以不同優(yōu)先級(jí)的定時(shí)器中斷的方式實(shí)現(xiàn)了中實(shí)時(shí)性任務(wù)與弱實(shí)時(shí)性任務(wù)之 間任務(wù)的搶占與恢復(fù);若在此時(shí)檢測(cè)弱實(shí)時(shí)性任務(wù)隊(duì)列中沒有弱實(shí)時(shí)任務(wù)標(biāo)志為1,則中 實(shí)時(shí)性任務(wù)隊(duì)列中的該任務(wù)跳出定時(shí)器1進(jìn)行執(zhí)行。S104、對(duì)無實(shí)時(shí)性任務(wù)按照對(duì)應(yīng)程序 執(zhí)行順序進(jìn)行任務(wù)輪詢。
[0037] 具體的,由于無實(shí)時(shí)性任務(wù)沒有實(shí)時(shí)性要求,則弱實(shí)時(shí)性任務(wù)隊(duì)列中的各個(gè)任務(wù) 按照在對(duì)應(yīng)程序中的順序進(jìn)行執(zhí)行即可。
[0038] 實(shí)施例二、一種嵌入式系統(tǒng)的多任務(wù)調(diào)度系統(tǒng)。下面結(jié)合圖2對(duì)本實(shí)施例提供的 系統(tǒng)進(jìn)行詳細(xì)說明。
[0039] 本實(shí)施例提供的系統(tǒng)包括任務(wù)劃分模塊201、第一任務(wù)調(diào)度模塊202、第二任務(wù)調(diào) 度模塊203和第三任務(wù)調(diào)度模塊204,其中第二任務(wù)調(diào)度模塊203還包括切換模塊2031。 [0040] 任務(wù)劃分模塊201主要用于按照實(shí)時(shí)性要求將嵌入式系統(tǒng)任務(wù)劃分為強(qiáng)實(shí)時(shí)性 任務(wù)、中實(shí)時(shí)性任務(wù)、弱實(shí)時(shí)性任務(wù)和無實(shí)時(shí)性任務(wù)。
[0041] 具體的,在LNG加氣機(jī)電控系統(tǒng)中,任務(wù)劃分模塊201將嵌入式系統(tǒng)中的任務(wù)按照 實(shí)時(shí)性要求分為強(qiáng)實(shí)時(shí)性任務(wù)、中實(shí)時(shí)性任務(wù)、弱實(shí)時(shí)性任務(wù)和無實(shí)時(shí)性任務(wù)。
[0042] 第一任務(wù)調(diào)度模塊202主要用于對(duì)強(qiáng)實(shí)時(shí)性任務(wù)采用硬件中