專利名稱:一種實(shí)時(shí)嵌入式操作系統(tǒng)的動(dòng)態(tài)計(jì)時(shí)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種實(shí)時(shí)嵌入式操作系統(tǒng)的動(dòng)態(tài)計(jì)時(shí)方法。
背景技術(shù):
實(shí)時(shí)操作系統(tǒng)需要采用時(shí)鐘計(jì)時(shí)功能進(jìn)行延遲任務(wù)蘇醒時(shí)間的管理以及對同優(yōu)先級(jí)任務(wù)共享處理器資源的管理。目前的實(shí)時(shí)操作系統(tǒng)(如FreeRT0S,UC/OS-2)采用了固定 時(shí)間片的管理方法,CPU在每個(gè)時(shí)間片上蘇醒并對每個(gè)延遲的任務(wù)進(jìn)行延遲時(shí)間更新操作 以及同優(yōu)先級(jí)任務(wù)輪轉(zhuǎn)操作等。這個(gè)時(shí)間片的大小是所有任務(wù)延遲中的最小值,具體操作 方法如下首先,利用硬件定時(shí)器設(shè)定固定的定時(shí)周期,定時(shí)周期到則產(chǎn)生定時(shí)中斷。然后, 在定時(shí)中斷的處理程序中更新系統(tǒng)時(shí)間并訪問延時(shí)任務(wù)鏈表,更新延時(shí)任務(wù)的剩余延時(shí)時(shí) 間。如果延時(shí)時(shí)間到,則把任務(wù)加入到就緒隊(duì)列中。盡管該方法簡單而且容易實(shí)現(xiàn),但是它 存在若干性能問題。首先,當(dāng)系統(tǒng)最小延時(shí)較小時(shí),需要采用小的定時(shí)周期,這樣即便最小 延時(shí)任務(wù)執(zhí)行頻率低,依然需要系統(tǒng)頻繁進(jìn)入定時(shí)中斷,增加了處理器負(fù)擔(dān);其次,固定的 定時(shí)周期限制了系統(tǒng)延時(shí)的分辨率。例如,1毫秒的定時(shí)周期決定了任務(wù)延時(shí)僅能以毫秒為 單位,這對某些需要精確延時(shí)的應(yīng)用構(gòu)成了障礙。
發(fā)明內(nèi)容
本發(fā)明的目的是為克服上述現(xiàn)有技術(shù)的不足,提供一種實(shí)時(shí)嵌入式操作系統(tǒng)的動(dòng) 態(tài)計(jì)時(shí)方法。為實(shí)現(xiàn)上述目的,本發(fā)明采用下述技術(shù)方案
一種實(shí)時(shí)嵌入式操作系統(tǒng)的動(dòng)態(tài)計(jì)時(shí)方法,該方法包括以下步驟 Stepl 當(dāng)定時(shí)器中斷時(shí),記錄此時(shí)的系統(tǒng)時(shí)間;
Step2 操作系統(tǒng)將各個(gè)任務(wù)需要執(zhí)行時(shí)刻升序排列組成延時(shí)任務(wù)鏈表,將鏈表頭的 任務(wù)需要執(zhí)行時(shí)刻和系統(tǒng)時(shí)間進(jìn)行比較,如果鏈表頭的任務(wù)需要執(zhí)行時(shí)刻小于等于系統(tǒng)時(shí) 間,則將鏈表頭的任務(wù)移出,添加到相應(yīng)的就緒任務(wù)鏈表中;反之則將鏈表頭的任務(wù)需要執(zhí) 行時(shí)刻減去系統(tǒng)時(shí)間,將差值作為鏈表頭的任務(wù)延時(shí)時(shí)間;
Step3 如果該延時(shí)時(shí)間大于定時(shí)器設(shè)定的最大周期,則將該最大周期設(shè)定為下次任務(wù) 的定時(shí)器中斷周期;如果延時(shí)時(shí)間小于定時(shí)器設(shè)定的最大周期,則將此延時(shí)時(shí)間作為下次 任務(wù)的定時(shí)器中斷周期,退出定時(shí)器中斷;
St印4 判斷延時(shí)任務(wù)鏈表是否為空,如為空則退出定時(shí)器中斷,反之則返回stepl繼 續(xù)執(zhí)行。所述定時(shí)器設(shè)定最大周期為硬件定時(shí)器設(shè)定的最大定時(shí)周期。所述step2中,每個(gè)任務(wù)的描述塊中都有一個(gè)變量表示該任務(wù)的需要執(zhí)行的時(shí) 亥IJ,當(dāng)任務(wù)需要延時(shí)時(shí),系統(tǒng)當(dāng)前時(shí)間加上任務(wù)需要延時(shí)時(shí)間,得到任務(wù)需要執(zhí)行的時(shí)刻, 然后按照任務(wù)需要執(zhí)行的先后順序插入到延時(shí)任務(wù)鏈表中。本發(fā)明的有益效果本發(fā)明的動(dòng)態(tài)計(jì)時(shí)方法采用可變定時(shí)時(shí)間取代現(xiàn)有固定定時(shí)時(shí)間,以硬件定時(shí)器時(shí)鐘源周期為時(shí)間單位取代現(xiàn)有以硬件定時(shí)時(shí)間為時(shí)間單位,減少了系統(tǒng)空閑時(shí)維護(hù)系統(tǒng)時(shí)間的不必要開銷,同時(shí)提高了系統(tǒng)的響應(yīng)時(shí)間,降低了處理器負(fù)載 并提高了定時(shí)精度。
圖1是本發(fā)明的流程圖2是任務(wù)延時(shí)時(shí)間小于定時(shí)器設(shè)定最大周期MaxPeriod的實(shí)施例; 圖3是任務(wù)延時(shí)時(shí)間大于定時(shí)器設(shè)定最大周期MaxPeriod的實(shí)施例。
具體實(shí)施例方式下面結(jié)合附圖和實(shí)施例對本發(fā)明作進(jìn)一步說明
如圖1所示當(dāng)定時(shí)器定時(shí)周期到時(shí),首先維護(hù)系統(tǒng)時(shí)間,系統(tǒng)時(shí)間由一個(gè)變量來記 錄,每次定時(shí)時(shí)間到,該變量加上本次定時(shí)時(shí)間。然后查詢延時(shí)任務(wù)鏈表,該鏈表是一個(gè)單 向鏈表,鏈表中元素為需要延時(shí)的任務(wù),該鏈表存儲(chǔ)在硬件RAM存儲(chǔ)器中。鏈表的移出操作 是,鏈表頭指針變量指向該鏈表的下一個(gè)任務(wù);鏈表的插入工作是,從鏈表頭開始,逐個(gè)比 較鏈表中任務(wù)執(zhí)行時(shí)刻和當(dāng)前插入鏈表的任務(wù)執(zhí)行時(shí)刻,直到找到比當(dāng)前插入鏈表的任務(wù) 執(zhí)行時(shí)刻大的任務(wù),使當(dāng)前插入鏈表的任務(wù)的next指針變量指向找到的任務(wù),使找到的任 務(wù)的前一個(gè)任務(wù)的next指針變量指向當(dāng)前插入鏈表的任務(wù)。由于延時(shí)任務(wù)鏈表是按照各 個(gè)任務(wù)需要執(zhí)行時(shí)刻升序排列,所以鏈表頭的延時(shí)任務(wù)需要執(zhí)行時(shí)刻是所有延時(shí)任務(wù)中的 最小執(zhí)行時(shí)刻,如果該最小執(zhí)行時(shí)刻小于等于當(dāng)前系統(tǒng)時(shí)間,則說明該任務(wù)需要執(zhí)行,把該 任務(wù)移出延時(shí)任務(wù)鏈表,添加到相應(yīng)的就緒任務(wù)鏈表中。一般情況下,最小執(zhí)行時(shí)刻等于當(dāng) 前系統(tǒng)時(shí)間,但當(dāng)有某個(gè)任務(wù)執(zhí)行時(shí)關(guān)斷了系統(tǒng)中斷,導(dǎo)致系統(tǒng)在定時(shí)器中斷時(shí)沒有及時(shí) 執(zhí)行中斷,此時(shí)會(huì)出現(xiàn)該最小執(zhí)行時(shí)刻小于當(dāng)前系統(tǒng)時(shí)間。直到有延時(shí)任務(wù)需要執(zhí)行時(shí)刻大于系統(tǒng)當(dāng)前時(shí)間,用延時(shí)任務(wù)需要執(zhí)行時(shí)間減去 系統(tǒng)時(shí)間,算出該延時(shí)任務(wù)還需要延時(shí)多長時(shí)間才需要執(zhí)行,如果該延時(shí)時(shí)間大于定時(shí)器 最大定時(shí)周期MaxPeriod (定時(shí)器最大定時(shí)周期MaxPeriod是硬件定時(shí)器設(shè)定的最大定時(shí) 周期,每個(gè)硬件定時(shí)器最大定時(shí)周期是根據(jù)實(shí)際硬件定時(shí)器性能來設(shè)置該定時(shí)周期),則將 MaxPeriod設(shè)定為下次任務(wù)的定時(shí)器中斷周期;如果延時(shí)時(shí)間小于MaxPeriod,則將此延時(shí) 時(shí)間作為下次任務(wù)的定時(shí)器中斷周期,退出定時(shí)器中斷。每個(gè)任務(wù)延時(shí)時(shí)間計(jì)算方法是,每個(gè)任務(wù)的描述塊中都有一個(gè)變量表示該任務(wù)的 需要執(zhí)行的時(shí)刻。當(dāng)任務(wù)需要延時(shí)時(shí),把系統(tǒng)當(dāng)前時(shí)間加上任務(wù)需要延時(shí)時(shí)間,得到任務(wù)需 要執(zhí)行的時(shí)刻,然后再按照任務(wù)需要執(zhí)行的先后順序插入到延時(shí)任務(wù)鏈表中。下面根據(jù)圖2和圖3說明一下技術(shù)方案的具體實(shí)施。假設(shè)某一時(shí)刻,延時(shí)任務(wù)鏈表 中有4個(gè)任務(wù),A、B、C、D。圖2中,延時(shí)任務(wù)鏈表中最早需要執(zhí)行的任務(wù)A需要延時(shí)30ms, 系統(tǒng)設(shè)置當(dāng)前的定時(shí)器值為30ms。30ms后定時(shí)器時(shí)間到,此時(shí)任務(wù)A需要執(zhí)行的時(shí)間小于 等于系統(tǒng)當(dāng)前時(shí)間,移出延時(shí)任務(wù)鏈表,任務(wù)B成為延時(shí)任務(wù)鏈表中的第一個(gè)任務(wù),任務(wù)B 需要執(zhí)行的時(shí)間還需要延時(shí)20ms,設(shè)置定時(shí)器值為20ms。圖3中,任務(wù)延時(shí)時(shí)間大于定時(shí) 器最大定時(shí)時(shí)間MaxPeriodl. 6s,設(shè)置定時(shí)器值為1. 6s,然后等待延時(shí)時(shí)間到,任務(wù)A延時(shí) 時(shí)間為0. 4s,小于定時(shí)器最大延時(shí)時(shí)間,設(shè)置定時(shí)器值為0. 4s。
權(quán)利要求
一種實(shí)時(shí)嵌入式操作系統(tǒng)的動(dòng)態(tài)計(jì)時(shí)方法,其特征是,該方法包括以下步驟Step1當(dāng)定時(shí)器中斷時(shí),記錄此時(shí)的系統(tǒng)時(shí)間;Step2操作系統(tǒng)將各個(gè)任務(wù)需要執(zhí)行時(shí)刻升序排列組成延時(shí)任務(wù)鏈表,將鏈表頭的任務(wù)需要執(zhí)行時(shí)刻和系統(tǒng)時(shí)間進(jìn)行比較,如果鏈表頭的任務(wù)需要執(zhí)行時(shí)刻小于等于系統(tǒng)時(shí)間,則將鏈表頭的任務(wù)移出,添加到相應(yīng)的就緒任務(wù)鏈表中;反之則將鏈表頭的任務(wù)需要執(zhí)行時(shí)刻減去系統(tǒng)時(shí)間,將差值作為鏈表頭的任務(wù)延時(shí)時(shí)間;Step3如果該延時(shí)時(shí)間大于定時(shí)器設(shè)定的最大周期,則將該最大周期設(shè)定為下次任務(wù)的定時(shí)器中斷周期;如果延時(shí)時(shí)間小于定時(shí)器設(shè)定的最大周期,則將此延時(shí)時(shí)間作為下次任務(wù)的定時(shí)器中斷周期,退出定時(shí)器中斷;Step4判斷延時(shí)任務(wù)鏈表是否為空,如為空則退出定時(shí)器中斷,反之則返回step1繼續(xù)執(zhí)行。
2.如權(quán)利要求1中所述的一種實(shí)時(shí)嵌入式操作系統(tǒng)的動(dòng)態(tài)計(jì)時(shí)方法,其特征是,所述 定時(shí)器設(shè)定最大周期為硬件定時(shí)器設(shè)定的最大定時(shí)周期。
3.如權(quán)利要求1中所述的一種實(shí)時(shí)嵌入式操作系統(tǒng)的動(dòng)態(tài)計(jì)時(shí)方法,其特征是,所述 step2中,每個(gè)任務(wù)的描述塊中都有一個(gè)變量表示該任務(wù)的需要執(zhí)行的時(shí)刻,當(dāng)任務(wù)需要延 時(shí)時(shí),系統(tǒng)當(dāng)前時(shí)間加上任務(wù)需要延時(shí)時(shí)間,得到任務(wù)需要執(zhí)行的時(shí)刻,然后按照任務(wù)需要 執(zhí)行的先后順序插入到延時(shí)任務(wù)鏈表中。
全文摘要
本發(fā)明提供了一種實(shí)時(shí)嵌入式操作系統(tǒng)中系統(tǒng)時(shí)間計(jì)時(shí)方法,該計(jì)時(shí)方法包括當(dāng)定時(shí)器定時(shí)周期到時(shí),首先維護(hù)系統(tǒng)時(shí)間,然后再從延時(shí)任務(wù)鏈表中移出就緒任務(wù),如果延時(shí)任務(wù)鏈表為空,則結(jié)束,如果不為空,則用下個(gè)任務(wù)蘇醒時(shí)間減去當(dāng)前系統(tǒng)時(shí)間,計(jì)算出任務(wù)蘇醒時(shí)間差,如果該時(shí)間差大于定時(shí)器允許定時(shí)周期,定時(shí)周期設(shè)置為最大定時(shí)周期,否則,定時(shí)周期設(shè)置為該時(shí)間差。本發(fā)明采用可變定時(shí)時(shí)間取代現(xiàn)有固定定時(shí)時(shí)間,以硬件定時(shí)器時(shí)鐘源周期為時(shí)間單位取代現(xiàn)有以硬件定時(shí)時(shí)間為時(shí)間單位,減少了系統(tǒng)空閑時(shí)維護(hù)系統(tǒng)時(shí)間的不必要開銷,同時(shí)提高了系統(tǒng)的響應(yīng)時(shí)間。
文檔編號(hào)G06F9/46GK101840353SQ20101017212
公開日2010年9月22日 申請日期2010年5月14日 優(yōu)先權(quán)日2010年5月14日
發(fā)明者王志華, 陳冬巖 申請人:陳冬巖