日韩成人黄色,透逼一级毛片,狠狠躁天天躁中文字幕,久久久久久亚洲精品不卡,在线看国产美女毛片2019,黄片www.www,一级黄色毛a视频直播

一種多任務(wù)實(shí)時(shí)操作系統(tǒng)的實(shí)現(xiàn)方法

文檔序號:6562963閱讀:888來源:國知局
專利名稱:一種多任務(wù)實(shí)時(shí)操作系統(tǒng)的實(shí)現(xiàn)方法
技術(shù)領(lǐng)域
本發(fā)明涉及操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)技術(shù)領(lǐng)域,具體涉及一種在單片機(jī)嵌入式實(shí)時(shí)操作系統(tǒng)中實(shí)現(xiàn)多任務(wù)調(diào)度的方法。
在應(yīng)用系統(tǒng)中,當(dāng)目標(biāo)系統(tǒng)軟件比較復(fù)雜、規(guī)模比較龐大時(shí),就需要一個(gè)操作系統(tǒng)的支持。目前,嵌入式的RTOS風(fēng)靡全球,例如Palm,VxWorks,Windows CE等等。但購買一個(gè)商用RTOS成本太高,而且無法獲得源代碼,同時(shí)由于商用RTOS具備較完善的功能,規(guī)模較大,需要的內(nèi)存和外存較多,較難移植到具體的單片機(jī)小系統(tǒng)上。因此編寫一個(gè)適用性強(qiáng),功能合適,規(guī)模較小的單片機(jī)操作系統(tǒng)就顯得非常有必要了。這也有助于單片機(jī)應(yīng)用軟件的編寫規(guī)范化和模塊化。
本發(fā)明的技術(shù)問題是這樣解決的,構(gòu)造一種可用于單片機(jī)嵌入式系統(tǒng)的多任務(wù)實(shí)時(shí)操作系統(tǒng)的實(shí)現(xiàn)方法,其特征在于包括以下步驟為每一個(gè)任務(wù)設(shè)置一個(gè)最大允許等待時(shí)間,將每一個(gè)需要占用CPU運(yùn)行的任務(wù)分為優(yōu)先級任務(wù)和一般任務(wù),用一個(gè)整數(shù)類型的數(shù)組記錄每個(gè)任務(wù)的等待時(shí)間并在定時(shí)器程序中對其數(shù)值進(jìn)行減量刷新;設(shè)置任務(wù)建立函數(shù),可將一個(gè)任務(wù)與其相對應(yīng)的任務(wù)程序相連,并建立該任務(wù)的TCB,將一個(gè)或多個(gè)其長度不大于基本單位時(shí)間的不定長時(shí)間片分配給一個(gè)任務(wù);設(shè)置任務(wù)掛起函數(shù),用于在非臨界區(qū)的內(nèi)存空間實(shí)現(xiàn)多任務(wù)之間的調(diào)度,調(diào)度時(shí),用函數(shù)和全局變量的形式來替換掉調(diào)度處的局部變量,每一個(gè)任務(wù)在所分配到的時(shí)間片結(jié)束或被掛起之前占用CPU;按照以下步驟進(jìn)行多任務(wù)調(diào)度保存現(xiàn)場狀態(tài)、檢查就緒任務(wù)隊(duì)列中有無任務(wù),如有任務(wù)則利用調(diào)度算法取出一個(gè)就緒任務(wù),調(diào)用任務(wù)運(yùn)行函數(shù)將該取出的任務(wù)設(shè)置為運(yùn)行狀態(tài),恢復(fù)現(xiàn)場狀態(tài);其中,所述調(diào)度算法包括以下步驟如果有等待時(shí)間超過最大允許等待時(shí)間的任務(wù),則運(yùn)行該任務(wù);如果有優(yōu)先級任務(wù),則按照輪轉(zhuǎn)法確定下一個(gè)就緒的優(yōu)先級任務(wù);如果沒有優(yōu)先級任務(wù),按照輪轉(zhuǎn)法確定下一個(gè)就緒的一般任務(wù)。
在按照本發(fā)明提供的方法中,所述調(diào)用任務(wù)掛起函數(shù)是執(zhí)行以下步驟將第一參數(shù)表示任務(wù)號所對應(yīng)的任務(wù)掛起第二參數(shù)表示的掛起時(shí)間,所述掛起時(shí)間以基本單位時(shí)間為單位,所述掛起時(shí)間為0時(shí),將所述第一參數(shù)表示任務(wù)號對應(yīng)的任務(wù)重新放到所述就緒任務(wù)隊(duì)列的末尾;所述掛起時(shí)間不為0時(shí),將所述第一參數(shù)表示任務(wù)號對應(yīng)的任務(wù)掛起所述第二時(shí)間表示的掛起時(shí)間后,再重新放到所述就緒任務(wù)隊(duì)列的末尾。
在按照本發(fā)明提供的方法中,還包括以下步驟設(shè)置任務(wù)就緒函數(shù)用于使某一個(gè)任務(wù)處于就緒狀態(tài)。
在按照本發(fā)明提供的方法中,還包括以下步驟設(shè)置任務(wù)優(yōu)先級設(shè)置函數(shù),用于在調(diào)用該函數(shù)時(shí),改變一般任務(wù)為優(yōu)先級任務(wù)或改變優(yōu)先級任務(wù)為一般任務(wù)。
在按照本發(fā)明提供的方法中,還包括以下步驟設(shè)置任務(wù)刪除函數(shù)用于刪除一個(gè)任務(wù)。
在按照本發(fā)明提供的方法中,所述保存現(xiàn)場包括以下步驟關(guān)中斷;保存當(dāng)前任務(wù)斷點(diǎn)信息,如堆棧、程序指針、寄存器等到該任務(wù)的TCB環(huán)境中以及開中斷;所述恢復(fù)現(xiàn)場包括以下步驟關(guān)中斷;用保存在該TCB中的環(huán)境信息來設(shè)置CPU堆棧、程序指針、寄存器等以及開中斷。
實(shí)施本發(fā)明提供的在單片機(jī)嵌入式實(shí)時(shí)操作系統(tǒng)中實(shí)現(xiàn)的一種多任務(wù)實(shí)時(shí)操作系統(tǒng)的實(shí)現(xiàn)方法,與許多現(xiàn)有RTOS相比,具有以下顯著進(jìn)步允許多個(gè)任務(wù)并行,任務(wù)執(zhí)行速度快,能夠滿足實(shí)時(shí)性要求;可支持足夠多的并行任務(wù),并行任務(wù)數(shù)量只受到實(shí)際硬件條件限制,例如8051系統(tǒng)內(nèi)部和外部RAM空間。通過合理地調(diào)整程序的嵌套調(diào)用,可以允許32個(gè)或者更多的任務(wù)同步執(zhí)行。這對于一般的嵌入式應(yīng)用足夠了;利用本發(fā)明方法實(shí)現(xiàn)似的操作系統(tǒng)占用極少的資源;并方便用戶調(diào)用,對用戶而講,他無須了解OS的原理,不需要了解信號量等保證機(jī)制。只了解幾個(gè)調(diào)用函數(shù)的用法即可,同時(shí)又給用戶程序提供了足夠的靈活性,在任一個(gè)合適的程序處都可以實(shí)現(xiàn)任務(wù)調(diào)度;針對性和實(shí)用性非常強(qiáng)?;诒景l(fā)明的方法,可以在當(dāng)前的許多軟件增加RTOS的功能,而且整個(gè)過程非常簡單,與此同時(shí),還提供了一個(gè)OS平臺,方便軟件的模塊化工作。
為在嵌入式操作系統(tǒng)中實(shí)現(xiàn)多任務(wù),同時(shí)還要滿足實(shí)時(shí)性,需要對CPU時(shí)間進(jìn)行劃分。在本發(fā)明中,任務(wù)的時(shí)間劃分不采用固定的時(shí)間片,而采用不定長時(shí)間片,時(shí)間片長短可以由用戶任意設(shè)置,只要有足夠精確的定時(shí)器。由于8051資源有限且應(yīng)用系統(tǒng)千差萬別,操作系統(tǒng)沒有也不可能占用某一個(gè)具體的定時(shí)器,因此該定時(shí)器需要用戶提供。假設(shè)用戶設(shè)置了8051的定時(shí)器T0,定時(shí)周期為10ms,并且把該時(shí)長(10ms)作為任務(wù)調(diào)度的基本時(shí)間單位。那么,10ms就是一個(gè)任務(wù)的最小時(shí)間片,也就是執(zhí)行任務(wù)可能的最小延時(shí)時(shí)間。為了保證實(shí)時(shí)性,就需要用戶任務(wù)程序在10ms內(nèi)完成,如果無法完成,必須掛起該任務(wù),騰出CPU給其他的需要運(yùn)行的任務(wù)。
假設(shè)一個(gè)實(shí)例中有一個(gè)任務(wù)task0,該任務(wù)全部執(zhí)行完畢需要15ms。那么,可以把該任務(wù)程序分成兩部分。先執(zhí)行該任務(wù)的第一部分約8ms的程序部分(只要小于10ms即可),掛起該任務(wù)后,允許其他任務(wù)占用CPU,等待調(diào)度程序再次分配CPU,來執(zhí)行剩下的第二部分的程序。
那么任務(wù)是如何調(diào)度的?通常在多任務(wù)環(huán)境中,由于任務(wù)必須在自己已經(jīng)分到的內(nèi)存空間正確運(yùn)行,互不干擾,互不破壞,這樣對于每個(gè)任務(wù)而言,都需要足夠的內(nèi)存空間來保存當(dāng)前的大量環(huán)境狀態(tài),這樣操作系統(tǒng)占用的空間將會較大。如果一個(gè)用戶程序中有10個(gè)任務(wù),一個(gè)任務(wù)占用1K RAM空間,那么10個(gè)任務(wù)將占用10K RAM,這將消耗嵌入式用戶大量的寶貴資源,非常不經(jīng)濟(jì),適用性很差。
如前所介紹,本發(fā)明采用的多任務(wù)實(shí)現(xiàn)方法,實(shí)際上是類似于MSDOS,Win31的“協(xié)作多任務(wù)”,即任務(wù)(程序)一直運(yùn)行到它們主動讓出CPU為止。而不是Linux,Windows NT所支持的“搶占調(diào)度多任務(wù)”。采用目前這種方法,顯然用戶程序需要在一個(gè)不處于臨界區(qū)的地方(即是釋放掉臨界資源后的地方)實(shí)現(xiàn)任務(wù)調(diào)度,用函數(shù)和全局變量的形式來替換掉調(diào)度處的局部變量。這樣,操作系統(tǒng)就不用保留各個(gè)任務(wù)當(dāng)前的大量狀態(tài)信息,并且不需要信號量,郵箱等復(fù)雜并發(fā)保證機(jī)制。這樣,此操作系統(tǒng)就可以做到非常短小精悍,目前只占用128字節(jié)的RAM和2k的ROM空間(可以允許8個(gè)任務(wù)同時(shí)執(zhí)行,如果任務(wù)增減,RAM空間將比例增減。實(shí)際上,RAM空間也就是所有TCB占用的空間),能夠在一般的嵌入式系統(tǒng)中得到廣泛的應(yīng)用。
任務(wù)調(diào)度的具體實(shí)現(xiàn),可以用一個(gè)掛起任務(wù)的函數(shù)來實(shí)現(xiàn)。該函數(shù)有兩個(gè)參數(shù),參數(shù)1表示掛起的任務(wù)號,參數(shù)2表示掛起的單位時(shí)間。顯然,任何一個(gè)任務(wù)可以掛起其他的任務(wù),也可以自身掛起;當(dāng)自身掛起時(shí),即是讓出了CPU;當(dāng)掛起時(shí)間為0時(shí),即是把自身任務(wù)重新放到了就緒任務(wù)的隊(duì)尾。然后執(zhí)行調(diào)度算法,把CPU分配給一個(gè)即將運(yùn)行的任務(wù)。
那么采用哪種調(diào)度算法?基本上采用環(huán)形調(diào)度法,即時(shí)間片輪轉(zhuǎn)法。假設(shè)就緒任務(wù)一共有4個(gè),采用“1→2→3→4→1”的調(diào)度方法,以保證所有任務(wù)都能執(zhí)行。換言之,每個(gè)任務(wù)使用一個(gè)時(shí)間片的CPU后,釋放處理機(jī)給下一個(gè)排在就緒隊(duì)首的任務(wù)后,自己返回到就緒隊(duì)列的隊(duì)尾(或者干脆掛起若干時(shí)間,騰出時(shí)間給其他就緒任務(wù))。對于優(yōu)先級任務(wù),比如中斷級別的任務(wù),或者頻繁執(zhí)行但執(zhí)行時(shí)間又很短暫的任務(wù),可以搶先執(zhí)行,但同樣遵循環(huán)形調(diào)度法則。用戶程序中需要定義一個(gè)最大等待時(shí)間。當(dāng)一個(gè)一般級別的任務(wù)由于被優(yōu)先級搶先,導(dǎo)致在就緒隊(duì)列中等待時(shí)間超過最大等待時(shí)間時(shí),此一般任務(wù)將被無條件的最先執(zhí)行。采用上述的調(diào)度方法后,就可以保證所有任務(wù)都可以被執(zhí)行,又能夠保證優(yōu)先級的任務(wù)的實(shí)時(shí)性。
在作為本發(fā)明方法一個(gè)實(shí)施例的操作系統(tǒng)中,提供以下接口給用戶,方便用戶的靈活應(yīng)用1)任務(wù)建立函數(shù)把一個(gè)任務(wù)與其相對應(yīng)的任務(wù)程序相連,并建立該任務(wù)的TCB;2)任務(wù)刪除函數(shù)刪除一個(gè)任務(wù);3)任務(wù)就緒函數(shù)使某一個(gè)任務(wù)處于就緒態(tài);4)任務(wù)優(yōu)先級設(shè)置函數(shù)改變一個(gè)任務(wù)的優(yōu)先級;5)任務(wù)運(yùn)行函數(shù)立刻執(zhí)行某一個(gè)任務(wù);6)任務(wù)掛起函數(shù)掛起某一個(gè)任務(wù)一定的時(shí)間;7)操作系統(tǒng)啟動函數(shù)啟動運(yùn)行。
另外,需要一個(gè)整數(shù)類型的數(shù)組。該數(shù)組元素的個(gè)數(shù)為任務(wù)的總數(shù),元素為各個(gè)任務(wù)等待的單位時(shí)間的時(shí)長。用戶需要在用戶的定時(shí)器程序中對所有數(shù)組元素進(jìn)行減量操作。操作系統(tǒng)需要各個(gè)任務(wù)等待時(shí)長(操作系統(tǒng)本身沒有定時(shí)計(jì)數(shù)功能),才能進(jìn)行正確的調(diào)度和控制。


圖1示出的基于本發(fā)明的多任務(wù)調(diào)度方法的實(shí)現(xiàn)流程中,在框101中,關(guān)中斷,在框102中,保存當(dāng)前任務(wù)斷點(diǎn)信息,如堆棧、程序指針、寄存器等到該任務(wù)TCB環(huán)境中,在框103中,開中斷;在框104中,檢查在就緒任務(wù)隊(duì)列中,有無隊(duì)列(隊(duì)列是否為空),如果隊(duì)列為空,則返回框104繼續(xù)檢查;如就緒任務(wù)隊(duì)列不為空,進(jìn)到框105,在框105中,按照其流程在圖2中給出的調(diào)度算法取出一個(gè)就緒任務(wù),并進(jìn)到框106中,在框106中,設(shè)置該任務(wù)為運(yùn)行狀態(tài),再在框107框中關(guān)中斷,在108框中,用保存在該TCB中的環(huán)境信息來設(shè)置CPU堆棧、程序指針、寄存器等,在框109中,開中斷。
在圖2示出的調(diào)度算法的流程圖中,在框201中,檢查有無等待時(shí)間超過最大允許等待時(shí)間的任務(wù)嗎,如沒有,則在框202中,檢查有無優(yōu)先級任務(wù),如沒有,則在框203中按照輪轉(zhuǎn)法找到下一個(gè)就緒的一般任務(wù),最后在框205中,取出該任務(wù);如在框202中查出存在優(yōu)先級任務(wù),則在框204中,按照輪轉(zhuǎn)法找到下一個(gè)就緒的優(yōu)先級任務(wù),并進(jìn)到框205取出該任務(wù);如果在框201中,檢查到存在有其等待時(shí)間超過最大允許等待時(shí)間的任務(wù),則直接到框205取出該任務(wù)。
下面以一個(gè)具體的實(shí)例程序來說明利用本發(fā)明方法實(shí)現(xiàn)RTOS進(jìn)行多任務(wù)調(diào)度的實(shí)際用法。
運(yùn)行硬件環(huán)境80C552小系統(tǒng);顯示16×2字符LCD;鍵盤4鍵。程序完成如下功能LCD左上角部分被兩個(gè)顯示任務(wù)輪流占用,LCD右上角顯示當(dāng)前時(shí)間;LCD左下角部分由一個(gè)任務(wù)實(shí)現(xiàn)動畫顯示,LCD右下角顯示一個(gè)實(shí)時(shí)數(shù)據(jù),當(dāng)有鍵盤按下時(shí),該數(shù)據(jù)被改變。
簡單說明一下該實(shí)例程序。該程序共有6個(gè)任務(wù),分述如下Task0每100ms執(zhí)行一次,實(shí)現(xiàn)一個(gè)普通數(shù)據(jù)變量的累加,并且顯示到顯示屏的坐標(biāo)(0,0)處;Task1每1秒鐘執(zhí)行一次,讀取并顯示當(dāng)前時(shí)間到坐標(biāo)(8,0)處,同時(shí)在1分鐘的時(shí)間內(nèi),允許Task0和Task4交替執(zhí)行30秒;Task2實(shí)現(xiàn)簡單的動畫顯示,顯示到坐標(biāo)(0,1)處;Task3每500ms實(shí)現(xiàn)一次實(shí)時(shí)數(shù)據(jù)的刷新,顯示位置(8,1);Task4實(shí)現(xiàn)簡單的動畫顯示,顯示到坐標(biāo)(0,0)處;Task5每10ms讀取鍵盤口,當(dāng)有鍵盤按下時(shí),改變實(shí)時(shí)數(shù)據(jù),并且立刻運(yùn)行Task3。
顯然,這里刻意把Task0和Task4顯示內(nèi)容處于同一個(gè)位置,來驗(yàn)證任務(wù)的刪除和重建功能。
用戶程序中設(shè)定了一個(gè)10ms定時(shí)器T0,在定時(shí)器中斷程序中對任務(wù)計(jì)數(shù)器數(shù)組中的每個(gè)值都運(yùn)行一次減量運(yùn)算(或者稱為減一操作)。這樣操作系統(tǒng)就可以根據(jù)任務(wù)計(jì)數(shù)器數(shù)組中的數(shù)值進(jìn)行正確的任務(wù)調(diào)度和處理了。因此操作系統(tǒng)的時(shí)間單位就是10ms。最快的響應(yīng)和控制將在10ms后執(zhí)行,從而滿足實(shí)時(shí)性。
主要程序可以如下實(shí)現(xiàn)Task0首先,該普通數(shù)據(jù)變量遞加,按十進(jìn)制格式顯示在坐標(biāo)(0,0)處,然后自身掛起10個(gè)單位的時(shí)間即可。
Task1從一個(gè)實(shí)時(shí)鐘芯片,如DS1687讀取時(shí)間后,按時(shí)間顯示格式顯示在坐標(biāo)(8,0)處;判斷該時(shí)間是否為前30秒鐘,如果是,重建Task0,刪除Task4,否則重建Task4,刪除Task0,最后自身掛起100個(gè)單位的時(shí)間;Task2在坐標(biāo)(0,1)到(7,1)之間,顯示一個(gè)位置循環(huán)左移的小圖標(biāo),每次顯示間距100毫秒,即自身掛起10個(gè)單位的時(shí)間;Task3按十進(jìn)制格式顯示一個(gè)實(shí)時(shí)數(shù)據(jù)到坐標(biāo)(8,1)處,然后自身掛起50個(gè)單位的時(shí)間;Task4在坐標(biāo)(0,0)到(7,0)之間,顯示一個(gè)位置循環(huán)右移的小圖標(biāo),每次顯示間距100毫秒,即自身掛起10個(gè)單位的時(shí)間;Task5讀鍵盤口數(shù)據(jù),如果沒有鍵被按下,且持續(xù)60秒鐘的話,關(guān)閉液晶背光;否則根據(jù)按鍵改變實(shí)時(shí)數(shù)據(jù)的數(shù)值,然后立刻調(diào)用Task3(即完成數(shù)據(jù)的實(shí)時(shí)刷新),最后自身掛起1個(gè)單位的時(shí)間。
在用戶的主程序中,開始分別調(diào)用任務(wù)建立函數(shù)來建立6個(gè)任務(wù);然后初始化定時(shí)器T0,最后調(diào)用操作系統(tǒng)啟動函數(shù)即可。
另外,本程序中的Task5定時(shí)鍵盤處理任務(wù)摘自一個(gè)實(shí)際的監(jiān)控系統(tǒng)軟件中的10毫秒定時(shí)中斷程序部分。從中可見,該任務(wù)每10ms執(zhí)行一次,讀取鍵盤口,消抖動,允許用戶的加速鍵應(yīng)用,每30秒自動送入一個(gè)退出鍵值到鍵盤緩沖區(qū)中。顯然,該程序比較大而復(fù)雜,在定時(shí)中斷程序中執(zhí)行會降低軟件可靠性和效率(中斷程序應(yīng)該盡量短小),在背景程序中執(zhí)行又無法保證讀鍵和顯示的實(shí)時(shí)性。如上所述,把鍵盤處理函數(shù)當(dāng)作一個(gè)任務(wù)執(zhí)行,就完美地解決了上述問題。
綜上所述,實(shí)現(xiàn)本發(fā)明提出的支持多任務(wù)調(diào)度的嵌入式RTOS的實(shí)現(xiàn)方法,在充分保證多個(gè)任務(wù)實(shí)時(shí)的同時(shí)保證響應(yīng)的實(shí)時(shí)性。雖然上述實(shí)施例以單片機(jī)8051舉例,實(shí)際上它可應(yīng)用到其他類型的單片機(jī)系統(tǒng)上。它可以作為一種微內(nèi)核RTOS,實(shí)際應(yīng)用時(shí)需要用戶合理設(shè)置任務(wù)調(diào)度。由于無須開辟巨大的RAM空間來保存各個(gè)任務(wù)的環(huán)境,因此顯得非常短小精悍,可以用在許多嵌入式應(yīng)用中。運(yùn)用之妙,在乎各人了。
權(quán)利要求
1.一種多任務(wù)實(shí)時(shí)操作系統(tǒng)的實(shí)現(xiàn)方法,其特征在于包括以下步驟(1)為每一個(gè)任務(wù)設(shè)置一個(gè)最大允許等待時(shí)間,將每一個(gè)需要占用CPU運(yùn)行的任務(wù)分為優(yōu)先級任務(wù)和一般任務(wù),用一個(gè)整數(shù)類型的數(shù)組記錄每個(gè)任務(wù)的等待時(shí)間并在定時(shí)器程序中對其數(shù)值進(jìn)行減量刷新,其特征在于,包括以下步驟(2)設(shè)置一個(gè)任務(wù)建立函數(shù),可將一個(gè)任務(wù)與其相對應(yīng)的任務(wù)程序相連,并建立該任務(wù)的TCB,將一個(gè)或多個(gè)其長度不大于基本單位時(shí)間的不定長時(shí)間片分配給一個(gè)任務(wù);(3)設(shè)置一個(gè)任務(wù)掛起函數(shù),用于在非臨界區(qū)的內(nèi)存空間實(shí)現(xiàn)多任務(wù)之間的調(diào)度,調(diào)度時(shí),用函數(shù)和全局變量的形式來替換掉調(diào)度處的局部變量,每一個(gè)任務(wù)在所分配到的時(shí)間片結(jié)束或被掛起之前占用CPU;(4)按照以下步驟進(jìn)行多任務(wù)調(diào)度保存現(xiàn)場狀態(tài)、檢查就緒任務(wù)隊(duì)列中有無任務(wù),如有任務(wù)則利用調(diào)度算法取出一個(gè)就緒任務(wù),調(diào)用任務(wù)運(yùn)行函數(shù)將該取出的任務(wù)設(shè)置為運(yùn)行狀態(tài),恢復(fù)現(xiàn)場狀態(tài);其中,所述調(diào)度算法包括以下步驟如果有等待時(shí)間超過最大允許等待時(shí)間的任務(wù),則運(yùn)行該任務(wù);如果有優(yōu)先級任務(wù),則按照輪轉(zhuǎn)法確定下一個(gè)就緒的優(yōu)先級任務(wù);如果沒有優(yōu)先級任務(wù),按照輪轉(zhuǎn)法確定下一個(gè)就緒的一般任務(wù)。
2.根據(jù)權(quán)利要求1所述方法,其特征在于,所述調(diào)用任務(wù)掛起函數(shù)是執(zhí)行以下步驟將第一參數(shù)表示任務(wù)號所對應(yīng)的任務(wù)掛起第二參數(shù)表示的掛起時(shí)間,所述掛起時(shí)間以基本單位時(shí)間為單位,所述掛起時(shí)間為0時(shí),將所述第一參數(shù)表示任務(wù)號對應(yīng)的任務(wù)重新放到所述就緒任務(wù)隊(duì)列的末尾;所述掛起時(shí)間不為0時(shí),將所述第一參數(shù)表示任務(wù)號對應(yīng)的任務(wù)掛起所述第二時(shí)間表示的掛起時(shí)間后,再重新放到所述就緒任務(wù)隊(duì)列的末尾。
3.根據(jù)權(quán)利要求1所述方法,其特征在于,還包括以下步驟設(shè)置任務(wù)就緒函數(shù)用于使某一個(gè)任務(wù)處于就緒狀態(tài)。
4.根據(jù)權(quán)利要求1所述方法,其特征在于,還包括以下步驟設(shè)置任務(wù)優(yōu)先級設(shè)置函數(shù),用于在調(diào)用該函數(shù)時(shí),改變一般任務(wù)為優(yōu)先級任務(wù)或改變優(yōu)先級任務(wù)為一般任務(wù)。
5.根據(jù)權(quán)利要求1所述方法,其特征在于,還包括以下步驟設(shè)置任務(wù)刪除函數(shù)用于刪除一個(gè)任務(wù)。
6.根據(jù)權(quán)利要求1所述方法,其特征在于,所述保存現(xiàn)場包括以下步驟關(guān)中斷;保存當(dāng)前任務(wù)斷點(diǎn)信息,如堆棧、程序指針、寄存器等到該任務(wù)的TCB環(huán)境中以及開中斷;所述恢復(fù)現(xiàn)場包括以下步驟關(guān)中斷;用保存在該TCB中的環(huán)境信息來設(shè)置CPU堆棧、程序指針、寄存器等以及開中斷。
全文摘要
一種單片機(jī)嵌入式多任務(wù)實(shí)時(shí)操作系統(tǒng)的實(shí)現(xiàn)方法,為每個(gè)任務(wù)設(shè)置最大允許等待時(shí)間,將任務(wù)分為優(yōu)先級任務(wù)和一般任務(wù),用整數(shù)類型的數(shù)組記錄每個(gè)任務(wù)的等待時(shí)間并在定時(shí)器程序中對其數(shù)值進(jìn)行減量刷新;通過設(shè)置任務(wù)建立函數(shù)和掛起函數(shù),將任務(wù)與其相對應(yīng)的任務(wù)程序相連或在非臨界區(qū)實(shí)現(xiàn)多任務(wù)調(diào)度,調(diào)度時(shí),如果有等待時(shí)間超過最大允許等待時(shí)間的任務(wù),則運(yùn)行該任務(wù);如果有優(yōu)先級任務(wù),則按照輪轉(zhuǎn)法確定下一個(gè)就緒的優(yōu)先級任務(wù);如果沒有優(yōu)先級任務(wù),按照輪轉(zhuǎn)法確定下一個(gè)就緒的一般任務(wù)。這種實(shí)現(xiàn)方法,允許多個(gè)任務(wù)并行,占用資源少,任務(wù)執(zhí)行速度快,在滿足實(shí)時(shí)性要求同時(shí),也可提供足夠的靈活性,調(diào)用也極為便利,針對性和實(shí)用性非常強(qiáng)。
文檔編號G06F9/38GK1409209SQ0112690
公開日2003年4月9日 申請日期2001年9月24日 優(yōu)先權(quán)日2001年9月24日
發(fā)明者熊勇 申請人:深圳市中興通訊股份有限公司上海第二研究所
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1