国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種單片機(jī)多任務(wù)操作系統(tǒng)的設(shè)計(jì)與應(yīng)用

2014-03-08 07:01朱德良吳國(guó)強(qiáng)陳新春
自動(dòng)化與儀表 2014年1期
關(guān)鍵詞:任務(wù)調(diào)度中斷間隔

朱德良,吳國(guó)強(qiáng),陳新春

(中電裝備山東電子有限公司,濟(jì)南 250101)

在以51系列單片機(jī)為內(nèi)核的嵌入式產(chǎn)品開發(fā)過(guò)程中經(jīng)常使用簡(jiǎn)單的前后臺(tái)系統(tǒng),在超級(jí)循環(huán)中依照一定次序進(jìn)行任務(wù)調(diào)用,而實(shí)時(shí)任務(wù)利用中斷進(jìn)行處理,這樣做的好處是處理起來(lái)比較簡(jiǎn)單方便。但其缺點(diǎn)也很明顯,尤其是在智能電能表領(lǐng)域中,隨著用戶對(duì)智能電表功能要求的不斷增加,需要處理的任務(wù)量不斷上升時(shí),任務(wù)執(zhí)行的實(shí)時(shí)性往往難以保證,而且一旦面臨更換硬件平臺(tái)的情況,幾乎沒有移植性可言,需要重復(fù)較大的工作量。因此,在嵌入式系統(tǒng)中使用實(shí)時(shí)操作系統(tǒng)來(lái)管理任務(wù)的調(diào)度是嵌入式應(yīng)用的一個(gè)重要趨勢(shì),是單片機(jī)高水平應(yīng)用開發(fā)的一個(gè)標(biāo)識(shí)[1-3]。

目前嵌入式實(shí)時(shí)操作系統(tǒng)有很多,如Vxworks、linux、μC/OSII等,但其系統(tǒng)本身就占用了大量的CPU資源,對(duì)于8位的51系列單片機(jī)來(lái)說(shuō)太過(guò)奢侈[4];文獻(xiàn)[5]在時(shí)間觸發(fā)的基礎(chǔ)上設(shè)計(jì)了一種多任務(wù)調(diào)度器,利用消息傳遞的方式使得控制器在多個(gè)任務(wù)之間進(jìn)行切換,得到了較好的效果;文獻(xiàn)[6]則對(duì)常用的RTX51實(shí)時(shí)系統(tǒng)的優(yōu)缺點(diǎn)進(jìn)行分析,提出了搶占任務(wù)實(shí)時(shí)處理的重要性。

本文在時(shí)間觸發(fā)系統(tǒng)的基礎(chǔ)上,增加了搶占式內(nèi)核的特性,對(duì)單片機(jī)中多任務(wù)操作系統(tǒng)設(shè)計(jì)提出了具體方法,提高了對(duì)搶占任務(wù)處理的實(shí)時(shí)性,并將其成功應(yīng)用在智能電表中,證明了可行性,且對(duì)系統(tǒng)的維護(hù)和移植工作提供了方便。

1 系統(tǒng)設(shè)計(jì)

在嵌入式系統(tǒng)設(shè)計(jì)時(shí),通常采用時(shí)間觸發(fā)和事件觸發(fā)兩種方式來(lái)實(shí)現(xiàn)[1],時(shí)間觸發(fā)機(jī)制為各種任務(wù)提供了一個(gè)共享的定時(shí)器中斷,通過(guò)定時(shí)器形成對(duì)任務(wù)的周期性調(diào)度,完成任務(wù)之間的切換。這種系統(tǒng)在規(guī)定事件內(nèi)只有一個(gè)任務(wù)在調(diào)用直到結(jié)束,因此是可預(yù)測(cè)的、可靠的,但對(duì)外部緊急任務(wù)可能造成延誤;而事件觸發(fā)系統(tǒng)主要是依靠系統(tǒng)的中斷來(lái)實(shí)現(xiàn),所以能夠?qū)ν獠渴录M(jìn)行快速的響應(yīng),但如果多個(gè)中斷源隨機(jī)時(shí)間間隔中斷,則中斷響應(yīng)可能遺漏[1]。

本系統(tǒng)在時(shí)間觸發(fā)系統(tǒng)的基礎(chǔ)上添加搶占的特性,對(duì)普通任務(wù)以時(shí)間觸發(fā)形式按照調(diào)度器周期按部就班的進(jìn)行調(diào)用;對(duì)緊急任務(wù)以搶占式系統(tǒng)進(jìn)行處理,滿足了緊急任務(wù)實(shí)時(shí)性處理的要求。

1.1 任務(wù)結(jié)構(gòu)

任務(wù)的結(jié)構(gòu)如下組織,是任務(wù)中必要的信息,為了得到快速的存取速度,建議存放在DATA區(qū)中。

typedef struct

{

unsigned char realtask;//搶占任務(wù)標(biāo)識(shí)

unsigned char priority;//任務(wù)優(yōu)先級(jí),以延時(shí)時(shí)間為衡量delay,deadline

unsigned char ready;// 任務(wù)狀態(tài)

unsigned char period;// 時(shí)間間隔

TASK(*p_task)(void);// 任務(wù)指針}TASK[MAX_TASK]

MAX_TASK定義其大小,一般在10個(gè)以內(nèi)為佳。

1.2 調(diào)度初始化

在系統(tǒng)的初期,初始化調(diào)度器是必要的一步,其主要作用是對(duì)時(shí)間觸發(fā)的定時(shí)器進(jìn)行初始化工作,根據(jù)系統(tǒng)要求,設(shè)定定時(shí)器的各個(gè)參數(shù),利用定時(shí)器中斷形成時(shí)間觸發(fā)的調(diào)度驅(qū)動(dòng)。

在8051系列的單片機(jī)中,可以使用定時(shí)器T0來(lái)完成此項(xiàng)工作,其具體初始化過(guò)程為

Initial_Timer0()

{

1)清空任務(wù)序列

2)設(shè)置定時(shí)器時(shí)間間隔數(shù)值

3)使能定時(shí)器中斷

4)開啟定時(shí)器

}

其中,定時(shí)器時(shí)間間隔數(shù)值的設(shè)定比較重要,如果時(shí)間間隔設(shè)定的較長(zhǎng),系統(tǒng)的反應(yīng)時(shí)間就會(huì)有影響,造成有的任務(wù)執(zhí)行延誤;如果時(shí)間間隔設(shè)置過(guò)短,反而會(huì)降低系統(tǒng)的執(zhí)行效率,因?yàn)檫^(guò)于頻繁的任務(wù)調(diào)度會(huì)消耗過(guò)多的系統(tǒng)資源。因此在設(shè)定時(shí)間間隔數(shù)值時(shí)應(yīng)謹(jǐn)慎考慮,建議在 (1~5)ms比較合適。

1.3 調(diào)度器的刷新(中斷服務(wù)程序ISR)

調(diào)度器的刷新任務(wù)主要是通過(guò)定時(shí)器的中斷服務(wù)程序?qū)θ蝿?wù)進(jìn)行調(diào)度。本系統(tǒng)是允許有搶占式緊急任務(wù)和合作式任務(wù)共存的,搶占式任務(wù)是需要立刻進(jìn)行處理的,所以在系統(tǒng)中具有最高的優(yōu)先級(jí),但是搶占式任務(wù)的出現(xiàn)打亂了普通任務(wù)的執(zhí)行,所以只有緊系事件才能設(shè)為搶占任務(wù),而且處理時(shí)間要盡可能的短。這樣,在調(diào)度器的每次刷新過(guò)程中都要檢測(cè)是否有搶占式任務(wù),如果有就直接執(zhí)行搶占任務(wù);否則判斷各普通任務(wù)的優(yōu)先級(jí),也就是延遲時(shí)間,如果到了0說(shuō)明該任務(wù)已需執(zhí)行,則任務(wù)的狀態(tài)ready+1,交由調(diào)度函數(shù)去執(zhí)行。具體流程如圖1所示。

圖1 調(diào)度器的刷新流程圖Fig.1 Flow chart of scheduler updating

void update(void)interrupt2 using1

{

Reset定時(shí)器;

檢測(cè)是否有搶占任務(wù)要運(yùn)行;

檢測(cè)是否有普通任務(wù)要運(yùn)行,ready+1;

還沒有需要運(yùn)行的任務(wù),優(yōu)先級(jí)減1;

}

1.4 任務(wù)增加與刪除

任務(wù)的添加函數(shù)new_Task()是在系統(tǒng)運(yùn)行初期將每個(gè)任務(wù)添加到任務(wù)隊(duì)列中,成功時(shí)返回值為新任務(wù)號(hào)task_ID,否則為出錯(cuò)信息。它有三個(gè)參數(shù):分別是任務(wù)的函數(shù)指針;任務(wù)的周期;任務(wù)類型。如果任務(wù)現(xiàn)有任務(wù)量沒有達(dá)到最大,將各個(gè)參數(shù)賦值給TASK結(jié)構(gòu),則插入任務(wù)隊(duì)列尾,并返回task_ID;否則返回錯(cuò)誤(有全局變量task_Num來(lái)記錄當(dāng)前)。

相應(yīng)的,當(dāng)任務(wù)執(zhí)行結(jié)束后(不需要周期執(zhí)行的任務(wù)),可以將任務(wù)從任務(wù)隊(duì)列中刪除,以保證資源的有效利用。其過(guò)程與添加函數(shù)正好相反。

1.5 調(diào)度函數(shù)

調(diào)度函數(shù)是在主循環(huán)中運(yùn)行的唯一函數(shù),將其與刷新函數(shù)相分離是為了防止長(zhǎng)任務(wù)對(duì)系統(tǒng)的影響,其主要作用就是將已經(jīng)就緒的任務(wù)進(jìn)行執(zhí)行。其過(guò)程為從任務(wù)隊(duì)列中取出就緒任務(wù) (TASK[i].ready>0)進(jìn)行執(zhí)行,并將其中的優(yōu)先級(jí)恢復(fù)為設(shè)定的時(shí)間間隔period重新開始,如果此任務(wù)是一次性任務(wù),則調(diào)用任務(wù)刪除函數(shù)進(jìn)行清理。

2 應(yīng)用

目前基于51系列內(nèi)核的單片機(jī)和soc芯片不計(jì)其數(shù),本文所描述的操作系統(tǒng)是業(yè)余標(biāo)準(zhǔn)的8051系列芯片,因此可以在任何基于8051系列芯片的嵌入式系統(tǒng)中進(jìn)行移植。

智能電能表系統(tǒng)是一個(gè)比較復(fù)雜的嵌入式系統(tǒng),它的MCU需要處理大量的內(nèi)部外部的任務(wù)和設(shè)備,其中主要任務(wù)有485通信、LCD液晶顯示、按鍵、讀寫E2PROM,紅外通訊,讀取計(jì)量芯片、蜂鳴器、ESAM模塊、載波模塊等,如圖2所示?;趥鹘y(tǒng)的前后臺(tái)系統(tǒng)中對(duì)于其開發(fā)越發(fā)復(fù)雜,也更加不可控,而將本文所述的系統(tǒng)運(yùn)用在其中,則有效地降低了開發(fā)的復(fù)雜性,提高了系統(tǒng)的可控性和魯棒

性,并且可以在相同系列的系統(tǒng)中進(jìn)行移植,大大節(jié)約了開發(fā)時(shí)間。其主程序可以描述為

void main(void)

{

1)初始化調(diào)度器;

2)初始化各個(gè)模塊信息;

3)調(diào)用任務(wù)添加函數(shù)將任務(wù)加載到任務(wù)序列;

while(1)

{

各任務(wù)調(diào)度函

}

}

圖2 智能電表系統(tǒng)任務(wù)示意圖Fig.2 Drawing of smart meter system tasks

3 結(jié)語(yǔ)

在嵌入式系統(tǒng)中使用實(shí)時(shí)操作系統(tǒng)來(lái)管理任務(wù)的調(diào)度是嵌入式應(yīng)用的一個(gè)重要趨勢(shì),但大部分商業(yè)實(shí)時(shí)系統(tǒng)需要很大的系統(tǒng)開銷,對(duì)51單片機(jī)來(lái)說(shuō)很難實(shí)現(xiàn)。本文在時(shí)間觸發(fā)系統(tǒng)的基礎(chǔ)上,增加了搶占式內(nèi)核的特性,提高了對(duì)搶占任務(wù)處理的實(shí)時(shí)性,并將其成功應(yīng)用在智能電表中,證明了可行性,且對(duì)系統(tǒng)的維護(hù)和移植工作提供了方便。

[1] Michael J Pont.時(shí)間觸發(fā)嵌入式系統(tǒng)設(shè)計(jì)模式[M].北京:中國(guó)電力出版社,2004.

[2] 鄭宗漢.實(shí)時(shí)系統(tǒng)軟件基礎(chǔ)[M].北京:清華大學(xué)出版社,2003.

[3] 陳明計(jì),周立功.嵌入式實(shí)時(shí)操作系統(tǒng)SmallRTOS 51原理及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2004.

[4] 朱鳳新,姚竹亭.基于AVR的時(shí)間觸發(fā)嵌入式系統(tǒng)[J].工業(yè)控制計(jì)算機(jī),2006,19(7):56-57.

[5] 李奇,樊曉平.一種時(shí)間觸發(fā)的多任務(wù)調(diào)度器設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2008(5):17-19.

[6] 徐哲.論RTX51單片機(jī)實(shí)時(shí)操作系統(tǒng)[J].齊齊哈爾工程學(xué)院學(xué)報(bào),2012,6(3):22-24.

猜你喜歡
任務(wù)調(diào)度中斷間隔
間隔問題
基于PEPA的云計(jì)算任務(wù)調(diào)度性能分析
“單片機(jī)中斷概述”微課教學(xué)設(shè)計(jì)
間隔之謎
基于改進(jìn)NSGA-Ⅱ算法的協(xié)同制造任務(wù)調(diào)度研究
Linux中斷線程化分析及中斷延時(shí)測(cè)試
跟蹤導(dǎo)練(二)(5)
基于小生境遺傳算法的相控陣?yán)走_(dá)任務(wù)調(diào)度
基于混合粒子群算法的云計(jì)算任務(wù)調(diào)度研究
上樓梯的學(xué)問
贵州省| 公主岭市| 比如县| 淮滨县| 衢州市| 东城区| 陇川县| 罗山县| 合阳县| 宁德市| 甘谷县| 监利县| 楚雄市| 安泽县| 福鼎市| 高唐县| 广丰县| 中方县| 高州市| 岑巩县| 合阳县| 夹江县| 崇左市| 建瓯市| 长汀县| 哈密市| 龙南县| 乐都县| 金川县| 黄石市| 连南| 绥江县| 桐庐县| 金昌市| 临沭县| 会泽县| 合作市| 阿合奇县| 大城县| 霍州市| 平罗县|