版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
setjmp構(gòu)建簡(jiǎn)單協(xié)作式多任務(wù)系統(tǒng)摘要討論一個(gè)利用標(biāo)準(zhǔn)語(yǔ)言庫(kù)函烽實(shí)現(xiàn)查詢式協(xié)作多任務(wù)系統(tǒng),給出完整的內(nèi)核和樣例程序并對(duì)源代碼進(jìn)行說(shuō)明。該系統(tǒng)具有簡(jiǎn)單易用的特點(diǎn),只需要編寫存取堆棧指針的宏就可方便地移植到新的平臺(tái)上。文章詳述了系統(tǒng)的優(yōu)缺點(diǎn),討論一些性能擴(kuò)展的方法。該內(nèi)核適用于中小規(guī)模的嵌入式軟件。關(guān)鍵詞協(xié)作式多任務(wù)語(yǔ)言引言本文介紹的是利用標(biāo)準(zhǔn)語(yǔ)言庫(kù)函數(shù)實(shí)現(xiàn)的具備此特點(diǎn)的協(xié)作式多任務(wù)系統(tǒng)。從本質(zhì)上講,實(shí)時(shí)多任務(wù)操作系統(tǒng)應(yīng)該具備按照優(yōu)先級(jí)搶占調(diào)度的內(nèi)核。然而,在實(shí)際應(yīng)用中,搶中式的多任務(wù)某種程序上帶來(lái)了用戶程序設(shè)計(jì)時(shí)數(shù)據(jù)保護(hù)的困難,并且,具備搶占功能的多任務(wù)內(nèi)核設(shè)計(jì)時(shí)困難也比較多,這會(huì)增加操作系統(tǒng)自身的代碼,也使它在小資源單片機(jī)系統(tǒng)中應(yīng)用較少;而協(xié)作多任務(wù)系統(tǒng)的調(diào)度只在用戶指定的時(shí)機(jī)發(fā)生,這會(huì)大大簡(jiǎn)化內(nèi)核和用戶系統(tǒng)的設(shè)計(jì),尤其本文實(shí)現(xiàn)的系統(tǒng)通過(guò)條件查詢來(lái)放棄,既符合傳統(tǒng)單片機(jī)程序設(shè)計(jì)的思維,又帶來(lái)了多任務(wù)、模塊化、可重入的編程便利。是標(biāo)準(zhǔn)語(yǔ)言庫(kù)函數(shù)的組成部分,它可以實(shí)現(xiàn)程序執(zhí)行中的遠(yuǎn)程轉(zhuǎn)操作。具體來(lái)說(shuō),它可以在一個(gè)函數(shù)中使用來(lái)初始化一個(gè)全局標(biāo)號(hào),然后只要該函數(shù)未曾返回,那么在其它任何地方都可以通過(guò)調(diào)用來(lái)跳轉(zhuǎn)到的下一條語(yǔ)句執(zhí)行。實(shí)際上,函數(shù)將發(fā)生調(diào)用處的局部環(huán)境保存在一個(gè)—的結(jié)構(gòu)當(dāng)中,只要主調(diào)函數(shù)中對(duì)應(yīng)的內(nèi)存未曾釋放函數(shù)返回時(shí)局部?jī)?nèi)存就失效了,那么在調(diào)用的時(shí)候就可以根據(jù)已保存的—參數(shù)恢復(fù)到的地方執(zhí)行。我們的系統(tǒng)中就是分析了標(biāo)準(zhǔn)庫(kù)函數(shù)的特點(diǎn),以簡(jiǎn)單的方式實(shí)現(xiàn)了協(xié)作式多任務(wù)。1演示程序?yàn)榱吮阌诶斫?,首先給出多任務(wù)演示程序的源代碼。這個(gè)程序演示了協(xié)作式多任務(wù)切換、任務(wù)的動(dòng)態(tài)生成、多任務(wù)共用代碼等功能,一共使用了—初始化根任務(wù)也就是語(yǔ)言函數(shù)、—?jiǎng)?chuàng)建新任務(wù)和查詢條件這3個(gè)基本的系統(tǒng)調(diào)用。由于面向嵌入式系統(tǒng),因而程序不會(huì)中止并且運(yùn)行中也沒(méi)有進(jìn)行任何輸出,需要借助適合的調(diào)試工具來(lái)理解多任務(wù)系統(tǒng)的運(yùn)行。文件清單##-1,*;2,*;;,;{;_400;_1,12,,400;_2,0,,;400;=01{==8;++++;}}1,*{;=0;!{_1,9,,400;=1;};=01{>;二055;使用函數(shù)調(diào)用在子程序中測(cè)試*;>++}}2,*{1{++>15;=0;}}{;二內(nèi)核2構(gòu)成內(nèi)核包括一個(gè)供外部用戶程序包含的頭文件-和具體實(shí)現(xiàn)的源文件-,它們提供了演示程序中用到的3個(gè)系統(tǒng)調(diào)用。內(nèi)核的實(shí)現(xiàn)代碼假定了堆棧是向下增長(zhǎng)的,并且通過(guò)宏來(lái)直接操作堆棧指針。以下代碼在686、++55、7068和32四種平臺(tái)中測(cè)試過(guò),只需在頭文件中定義相應(yīng)的平臺(tái)類型即可順利編譯。1-文件清單#*選擇86_6,86_5,—或68_*#86_6#_10{*,*;_;;*;};[_];_,;_;_*,*,,*,;#{[];!{++;>=_=0;[],1;文02-件 清單#〃-〃#86_6||86_5#__,#__,#_##_=*#_=#68_#_〃7,{〃#〃}〃#_〃{〃#〃},7〃#[_];_=1;;,;_{_;二+*-+-1;}_*,*,,*,{—>=_-1;_;_;![_]{_;[_]=;[_]=;[_]=;_++;-=+-1;}俄碼說(shuō)明任務(wù)代碼通過(guò)執(zhí)行設(shè)置本任務(wù)下次查詢時(shí)的返回點(diǎn),然后在等待條件放棄掉跳轉(zhuǎn)到下一任務(wù)的返回點(diǎn)處執(zhí)行。如此周而復(fù)始,讓各任務(wù)都獲得輪轉(zhuǎn)運(yùn)行的機(jī)會(huì),也要求各任務(wù)都需要主動(dòng)通過(guò)等待條件的方式放棄掉。系統(tǒng)中除了中斷服務(wù)程序之外,所有任務(wù)都是平等的,都應(yīng)該遵循同樣的規(guī)則和其它任務(wù)一起協(xié)作運(yùn)行。基本系統(tǒng)中沒(méi)有設(shè)計(jì)殺死任務(wù)的調(diào)用,這要求各任務(wù)都應(yīng)當(dāng)設(shè)計(jì)成某種形式的無(wú)限循環(huán)。任務(wù)中等待的條件可以是任務(wù)復(fù)雜的表達(dá)式或都函數(shù)調(diào)用,也可以是中斷服務(wù)程序設(shè)置的全局變量注意加定義。一般在任務(wù)執(zhí)行時(shí)會(huì)讓下次等待的條件不再滿足,避免某個(gè)任務(wù)一直霸占將系統(tǒng)餓死。在嵌入式軟件中還經(jīng)常會(huì)遇到任務(wù)定時(shí)啟動(dòng)和超時(shí)等待在操作上,在我們的系統(tǒng)中可以維護(hù)一個(gè)時(shí)間計(jì)數(shù)器,只需在適當(dāng)?shù)牡胤接涗洉r(shí)刻,然后在任務(wù)查詢條件中判斷當(dāng)前計(jì)數(shù)器和記錄時(shí)刻之間的差值就可以了。內(nèi)核實(shí)現(xiàn)的代碼則相當(dāng)簡(jiǎn)法。由于主要的保護(hù)和恢復(fù)任務(wù)現(xiàn)場(chǎng)的工作都由語(yǔ)言標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)了,我們就只需要操縱一下堆棧指針?lè)乐共煌娜蝿?wù)使用了重疊的局部環(huán)境,這個(gè)工作在初始化和創(chuàng)建任務(wù)的時(shí)候通過(guò)預(yù)定義的兩個(gè)宏來(lái)實(shí)現(xiàn)。在—函數(shù)中,記錄了主任務(wù)函數(shù)保留字節(jié)堆棧后的新棧頂位置,然后在每次_時(shí)都根據(jù)要求為每個(gè)任務(wù)保留字節(jié)的堆棧并重新計(jì)算下一個(gè)。在—函數(shù)中利用了函數(shù)的返回值直接返回時(shí)為0,跳轉(zhuǎn)返回時(shí)非0,使得一方面—能正?;氐秸{(diào)用者,又讓下次輪轉(zhuǎn)到新任務(wù)時(shí)能夠找到創(chuàng)建時(shí)的入口。■中定義的使用了一個(gè){???0實(shí)現(xiàn)多語(yǔ)句宏的語(yǔ)言小技巧,這樣能保證在任何情況下都可以如單條語(yǔ)句一樣在源程序中使用,需要擔(dān)心多了或者少了大括弧破壞匹配之類的問(wèn)題,并且,所有的編譯器都會(huì)優(yōu)化掉這個(gè)假循環(huán)。為了盡量使程序簡(jiǎn)單并說(shuō)明問(wèn)題,以上代碼中沒(méi)有考慮中斷相關(guān)的數(shù)據(jù)保護(hù)問(wèn)題。實(shí)際運(yùn)行的系統(tǒng)中,如果首先寫堆棧指針不能一步完成如這樣的8位機(jī),那么,在寫操作正在進(jìn)行的時(shí)候絕對(duì)不能允許中斷;另外,在任務(wù)中查詢的條件如果和中斷有關(guān),那么也必須考慮數(shù)據(jù)的完整性。4性能分析所有的協(xié)作式多任務(wù)系統(tǒng)中任務(wù)切換時(shí)間都和用戶代碼是否長(zhǎng)期占用、就緒時(shí)刻有關(guān),比標(biāo)準(zhǔn)系統(tǒng)略差的是,我們的簡(jiǎn)單系統(tǒng)中不支持任務(wù)優(yōu)先級(jí),并且完成一輪查詢調(diào)度的時(shí)間還和任務(wù)數(shù)目有關(guān)。這也是為了達(dá)到簡(jiǎn)單和可移植性目標(biāo)而不得已作出的犧牲。在各任務(wù)間切換查詢條件通過(guò)語(yǔ)言標(biāo)準(zhǔn)庫(kù)函數(shù)實(shí)現(xiàn),般來(lái)講函數(shù)要從內(nèi)存中恢復(fù)大部分寄存器,執(zhí)行它也需要若干條指令的時(shí)間。為了面向嵌入式系統(tǒng)應(yīng)用,任務(wù)控制塊采用靜態(tài)數(shù)組來(lái)實(shí)現(xiàn),這樣要求預(yù)先確定系統(tǒng)的最大任務(wù)數(shù)■中的_。如果需要,也可以通過(guò)環(huán)波鏈表來(lái)動(dòng)態(tài)管理任務(wù)控制塊,這時(shí)可以簡(jiǎn)單實(shí)現(xiàn)任務(wù)的動(dòng)態(tài)創(chuàng)建和刪除,并且通過(guò)指針來(lái)訪問(wèn)也要比通過(guò)下標(biāo)略快—點(diǎn)。在某些情況下,如果在中斷返回后需要執(zhí)行某關(guān)鍵任務(wù),可以考慮通過(guò)設(shè)置高級(jí)中斷的方法來(lái)實(shí)現(xiàn)。具體地講,就是在中斷返回前改變返回地址到某函數(shù)入口高級(jí)中斷服務(wù)程序,同時(shí)保留原返回地址到堆棧中,這樣在高級(jí)中斷服務(wù)程序完成后執(zhí)行就又回到了正常的多任務(wù)查詢流程。使用高級(jí)中斷時(shí)要注意現(xiàn)場(chǎng)保護(hù)的銜接
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 培訓(xùn)機(jī)構(gòu)年度工作制度
- 夜校培訓(xùn)學(xué)時(shí)管理制度
- 咨詢培訓(xùn)公司會(huì)計(jì)制度
- 縣教師外出培訓(xùn)制度
- 培訓(xùn)學(xué)校危機(jī)管理制度
- 傳媒公司員工培訓(xùn)制度
- 產(chǎn)科新護(hù)士培訓(xùn)制度
- 反恐怖教育與培訓(xùn)制度
- 安全培訓(xùn)及教育費(fèi)用制度
- 小學(xué)教師校內(nèi)再培訓(xùn)制度
- 康復(fù)科康復(fù)治療計(jì)劃制定流程
- 精神科常見藥物不良反應(yīng)及處理
- 電梯的安裝合同(標(biāo)準(zhǔn)版)
- 光伏電站運(yùn)維管理標(biāo)準(zhǔn)操作規(guī)程
- 鋼筋施工施工方案
- 脊髓電刺激促醒術(shù)課件
- 執(zhí)行信息屏蔽申請(qǐng)書
- SA8000-2026社會(huì)責(zé)任管理體系新版的主要變化及標(biāo)準(zhǔn)內(nèi)容培訓(xùn)教材
- 嚴(yán)格執(zhí)行民主集中制方面存在問(wèn)題及整改措施
- 農(nóng)業(yè)安全用藥培訓(xùn)機(jī)械課件
- DB11∕T 2375-2024 城市運(yùn)行監(jiān)測(cè)指標(biāo)體系
評(píng)論
0/150
提交評(píng)論