欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

嵌入式實(shí)時(shí)操作系統(tǒng)的制作方法

文檔序號(hào):11774106閱讀:264來(lái)源:國(guó)知局
本發(fā)明屬于計(jì)算機(jī)
技術(shù)領(lǐng)域
:,具體涉及到一種嵌入式實(shí)時(shí)操作系統(tǒng)。
背景技術(shù)
::隨著嵌入式技術(shù)的普及,越來(lái)越多的電子產(chǎn)品使用嵌入式系統(tǒng)開(kāi)發(fā),而嵌入式操作系統(tǒng)是嵌入式系統(tǒng)的核心,所以嵌入式操作系統(tǒng)的性能直接影響到產(chǎn)品的性能。和通用操作系統(tǒng)相比,嵌入式操作系統(tǒng)一般都是實(shí)時(shí)性的。目前市場(chǎng)中流行的嵌入式實(shí)時(shí)操作系統(tǒng)有:vxworks、uclinux和wince。vxworks操作系統(tǒng)是美國(guó)windriver公司于1983年設(shè)計(jì)開(kāi)發(fā)的一種嵌入式實(shí)時(shí)操作系統(tǒng),它適用范圍廣,適用性強(qiáng),可靠性高,可用于所有流行的cpu平臺(tái)。美國(guó)火星探測(cè)器所使用的嵌入式實(shí)時(shí)操作系統(tǒng)就是vxworks,它的價(jià)格也很昂貴,對(duì)于成本要求很高的產(chǎn)品不太適合。uclinux是根據(jù)特定的硬件需求從linux內(nèi)核剪裁出來(lái)的,它的特點(diǎn)是功能強(qiáng)大,幾乎支持所有功能,而且是免費(fèi)的,所以現(xiàn)在一半的嵌入式系統(tǒng)都是使用此操作系統(tǒng)。它的缺點(diǎn)就是剪裁后占用空間依舊很大,這樣硬件成本得不到有效控制,不太適合對(duì)用戶交互要求很少的工業(yè)控制領(lǐng)域。wince是微軟開(kāi)發(fā)得一個(gè)開(kāi)放得,可升級(jí)得32位嵌入式實(shí)時(shí)操作系統(tǒng)。它得特點(diǎn)是功能強(qiáng)大,圖像處理能力強(qiáng),編程接口簡(jiǎn)單易學(xué),和通用編程幾乎沒(méi)什么差別,但是對(duì)操作系統(tǒng)得剪裁還是很麻煩得,同樣它的價(jià)格不菲。因此,現(xiàn)有技術(shù)中的嵌入式實(shí)時(shí)操作系統(tǒng)存在價(jià)格昂貴、所占用空間大、不適合應(yīng)用于工業(yè)控制領(lǐng)域的缺陷。技術(shù)實(shí)現(xiàn)要素:本發(fā)明提出一種嵌入式實(shí)時(shí)操作系統(tǒng),用于實(shí)現(xiàn)所占空間小,實(shí)時(shí)性得到提高的嵌入式實(shí)時(shí)操作系統(tǒng)。本發(fā)明采取的技術(shù)方案為:一種嵌入式實(shí)時(shí)操作系統(tǒng),包括應(yīng)用層和內(nèi)核;所述應(yīng)用層與內(nèi)核之間進(jìn)行數(shù)據(jù)交互;所述應(yīng)用層包括存儲(chǔ)系統(tǒng)、設(shè)備驅(qū)動(dòng)單元、虛擬內(nèi)存單元和網(wǎng)絡(luò)協(xié)議棧;所述內(nèi)核包括任務(wù)管理單元、時(shí)間管理單元、信號(hào)量管理單元、內(nèi)存管理單元、cpu單元和icp單元;所述嵌入式實(shí)時(shí)操作系統(tǒng)在處理任務(wù)時(shí),所述任務(wù)管理單元將要處理的任務(wù)進(jìn)行優(yōu)先級(jí)劃分,并與正在處理任務(wù)的優(yōu)先級(jí)進(jìn)行比較,將優(yōu)先級(jí)低的任務(wù)通過(guò)所述時(shí)間管理單元進(jìn)行延時(shí),然后所述信號(hào)量管理單元用于保證被延時(shí)的任務(wù)不被并發(fā)調(diào)用,并且內(nèi)存管理單元為被執(zhí)行的任務(wù)提供所需的內(nèi)存,最后通過(guò)icp單元進(jìn)行相互通信,cpu單元進(jìn)行任務(wù)數(shù)據(jù)的處理和指令的執(zhí)行。優(yōu)選的,所述任務(wù)管理單元具體包括,任務(wù)調(diào)度單元、任務(wù)創(chuàng)建單元、任務(wù)刪除單元、任務(wù)掛起單元和任務(wù)喚醒單元;所述任務(wù)調(diào)度單元用于對(duì)嵌入式實(shí)時(shí)操作系統(tǒng)中的普通任務(wù)、實(shí)時(shí)任務(wù)和空閑任務(wù)進(jìn)行調(diào)度;所述任務(wù)創(chuàng)建單元用于嵌入式實(shí)時(shí)操作系統(tǒng)在編譯的時(shí)候預(yù)定義將要使用的任務(wù)數(shù);所述任務(wù)刪除單元用于釋放任務(wù)控制塊,并將任務(wù)控制塊返還給任務(wù)池;所述任務(wù)掛起單元用于掛起當(dāng)前任務(wù)或者就緒狀態(tài)中的任務(wù);所述任務(wù)喚醒單元用于將掛起的任務(wù)恢復(fù)到就緒狀態(tài)。優(yōu)選的,所述任務(wù)調(diào)度單元具體用于:普通任務(wù)在系統(tǒng)中按時(shí)間片方式調(diào)度,即每個(gè)普通任務(wù)分配一固定的時(shí)間片,當(dāng)它擁有的時(shí)間片用完時(shí),就調(diào)度就緒隊(duì)列中下一個(gè)普通任務(wù);實(shí)時(shí)任務(wù)的調(diào)度策略是,普通任務(wù)運(yùn)行過(guò)程中,如果實(shí)時(shí)任務(wù)等待的資源可用,就中斷普通任務(wù)的運(yùn)行,調(diào)度實(shí)時(shí)任務(wù)運(yùn)行;并將實(shí)時(shí)任務(wù)按優(yōu)先級(jí)劃分,如果當(dāng)前運(yùn)行的實(shí)時(shí)任務(wù)比就緒隊(duì)列中任務(wù)的優(yōu)先級(jí)高,那么就繼續(xù)運(yùn)行優(yōu)先級(jí)高的任務(wù),直到該任務(wù)進(jìn)入等待狀態(tài)或者刪除,然后就調(diào)度就緒隊(duì)列中優(yōu)先級(jí)最高的任務(wù);如果當(dāng)前實(shí)時(shí)任務(wù)的優(yōu)先級(jí)沒(méi)有就緒隊(duì)列中實(shí)時(shí)任務(wù)的優(yōu)先級(jí)高,則中斷當(dāng)前任務(wù)的運(yùn)行,調(diào)度優(yōu)先級(jí)更高的實(shí)時(shí)任務(wù)運(yùn)行;空閑任務(wù)在沒(méi)有普通任務(wù)運(yùn)行和實(shí)時(shí)任務(wù)運(yùn)行時(shí)被調(diào)度,它在系統(tǒng)啟動(dòng)前被創(chuàng)建,一直生存在系統(tǒng)運(yùn)行期間,不能被刪除。優(yōu)選的,所述時(shí)間管理單元具體包括任務(wù)延時(shí)單元和延時(shí)喚醒單元;所述任務(wù)延時(shí)單元用于將任務(wù)添加到延時(shí)等待隊(duì)列中,直到延時(shí)時(shí)間到期,或者延時(shí)喚醒該任務(wù);所述延時(shí)喚醒單元將延時(shí)睡眠的任務(wù)喚醒。優(yōu)選的,所述信號(hào)量管理單元具體包括同步信號(hào)量管理單元和互斥信號(hào)量管理單元;所述同步信號(hào)量管理單元用于處理非獨(dú)占資源,每個(gè)項(xiàng)目可用就釋放一個(gè)信號(hào)量,直到釋放滿,同時(shí)任務(wù)可以得到釋放的信號(hào)量取走這些可用的項(xiàng)目;所述互斥信號(hào)量管理單元用于處理獨(dú)占式資源,任何時(shí)候只能有一個(gè)任務(wù)占用它,下一個(gè)任務(wù)必須等待前一個(gè)任務(wù)釋放資源后才可以繼續(xù)使用。優(yōu)選的,所述內(nèi)存管理單元具體包括:內(nèi)存初始化將系統(tǒng)固定的大內(nèi)存段分成一定數(shù)量小內(nèi)存段,設(shè)置內(nèi)存使用表,初始化內(nèi)存結(jié)構(gòu)各個(gè)值;從空閑內(nèi)存中取一塊出來(lái)給任務(wù)使用;任務(wù)使用完內(nèi)存后,將釋放的內(nèi)存添加到空閑表中。優(yōu)選的,所述內(nèi)核還包括郵箱管理單元,所述郵箱管理單元用于任務(wù)可使用郵箱給另一個(gè)任務(wù)發(fā)送特定的數(shù)據(jù)。優(yōu)選的,所述郵箱管理單元具體包括郵箱創(chuàng)建單元、郵箱刪除單元、郵箱等待單元和郵箱釋放單元;所述郵箱創(chuàng)建單元用于嵌入式實(shí)時(shí)操作系統(tǒng)為郵箱維護(hù)一個(gè)結(jié)構(gòu)池,郵箱創(chuàng)建單元取結(jié)構(gòu)池中空閑結(jié)構(gòu),并對(duì)郵箱結(jié)構(gòu)進(jìn)行初始化;所述郵箱刪除單元用于郵箱在不使用時(shí),將郵箱結(jié)構(gòu)放入緩沖池中以給其他任務(wù)使用;所述郵箱等待單元用于等待所需資源條件得到滿足;所述郵箱釋放單元用于當(dāng)任務(wù)消息資源準(zhǔn)備好以后,通過(guò)郵箱傳遞、釋放郵箱。優(yōu)選的,所述郵箱等待單元具體用于:將郵箱等待單元分延時(shí)等待、一直等待和不等待三種情況;延時(shí)等待是指只等待規(guī)定的時(shí)間,等待時(shí)間到期后,如果資源條件還沒(méi)滿足,則返回超時(shí);一直等待是指只要所需資源條件不滿足,則將任務(wù)一直掛起,直到條件滿足任務(wù)才被喚醒;不等待是指資源不滿足時(shí),任務(wù)不被掛起,任務(wù)繼續(xù)運(yùn)行。采用上述技術(shù)方案,具有以下優(yōu)點(diǎn):本發(fā)明提出的嵌入式實(shí)時(shí)操作系統(tǒng),通過(guò)內(nèi)存管理單元將系統(tǒng)的大內(nèi)存段分成一定數(shù)量小內(nèi)存段,從空閑內(nèi)存中取一塊出來(lái)給任務(wù)使用,任務(wù)使用完內(nèi)存后,將釋放的內(nèi)存添加到空閑表中;充分的利用了內(nèi)存資源,優(yōu)化了內(nèi)存的使用率,使本發(fā)明所占空間??;并且在任務(wù)調(diào)度單元中,將實(shí)時(shí)任務(wù)分為不同的優(yōu)先級(jí),最高優(yōu)先級(jí)優(yōu)先占有cpu時(shí)間片,只有當(dāng)高優(yōu)先級(jí)睡眠時(shí)低優(yōu)先級(jí)的進(jìn)程才占有時(shí)間片,一旦高優(yōu)先級(jí)任務(wù)喚醒單元馬上又占有cpu時(shí)間片,響應(yīng)一個(gè)事件,從中斷、任務(wù)調(diào)度單元、到函數(shù)調(diào)用、均按預(yù)期及時(shí)進(jìn)行,做到及時(shí)響應(yīng),提高本發(fā)明的實(shí)時(shí)性。附圖說(shuō)明圖1為本發(fā)明的系統(tǒng)結(jié)構(gòu)圖;圖2為本發(fā)明的一種方法流程圖。具體實(shí)施方式為使本發(fā)明要解決的技術(shù)問(wèn)題、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖及具體實(shí)施例進(jìn)行詳細(xì)描述,這里的描述不意味著對(duì)應(yīng)于實(shí)施例中陳述的具體實(shí)例的所有主題都在權(quán)利要求中引用了。ipc(inter-processcommunication)進(jìn)程間通信就是指多個(gè)任務(wù)進(jìn)程之間相互通信,交換信息的方法。請(qǐng)參照?qǐng)D1所示,一種嵌入式實(shí)時(shí)操作系統(tǒng),包括應(yīng)用層和內(nèi)核;所述應(yīng)用層與內(nèi)核之間進(jìn)行數(shù)據(jù)交互;所述應(yīng)用層包括存儲(chǔ)系統(tǒng)、設(shè)備驅(qū)動(dòng)單元、虛擬內(nèi)存單元和網(wǎng)絡(luò)協(xié)議棧;所述內(nèi)核包括任務(wù)管理單元、時(shí)間管理單元、信號(hào)量管理單元、內(nèi)存管理單元、cpu單元和icp單元;所述嵌入式實(shí)時(shí)操作系統(tǒng)在處理任務(wù)時(shí),所述任務(wù)管理單元將要處理的任務(wù)進(jìn)行優(yōu)先級(jí)劃分,并與正在處理任務(wù)的優(yōu)先級(jí)進(jìn)行比較,將優(yōu)先級(jí)低的任務(wù)通過(guò)所述時(shí)間管理單元進(jìn)行延時(shí),然后所述信號(hào)量管理單元用于保證被延時(shí)的任務(wù)不被并發(fā)調(diào)用,并且內(nèi)存管理單元為被執(zhí)行的任務(wù)提供所需的內(nèi)存,最后通過(guò)icp單元進(jìn)行相互通信,cpu單元進(jìn)行任務(wù)數(shù)據(jù)的處理和指令的執(zhí)行。進(jìn)一步地,所述任務(wù)管理單元具體包括,任務(wù)調(diào)度單元、任務(wù)創(chuàng)建單元、任務(wù)刪除單元、任務(wù)掛起單元和任務(wù)喚醒單元;所述任務(wù)調(diào)度單元用于對(duì)嵌入式實(shí)時(shí)操作系統(tǒng)中的普通任務(wù)、實(shí)時(shí)任務(wù)和空閑任務(wù)進(jìn)行調(diào)度;具體地,所述任務(wù)調(diào)度單元具體用于:普通任務(wù)在系統(tǒng)中按時(shí)間片方式調(diào)度,即每個(gè)普通任務(wù)分配一固定的時(shí)間片,當(dāng)它擁有的時(shí)間片用完時(shí),就調(diào)度就緒隊(duì)列中下一個(gè)普通任務(wù);實(shí)時(shí)任務(wù)的調(diào)度策略是,普通任務(wù)運(yùn)行過(guò)程中,如果實(shí)時(shí)任務(wù)等待的資源可用,就中斷普通任務(wù)的運(yùn)行,調(diào)度實(shí)時(shí)任務(wù)運(yùn)行;并將實(shí)時(shí)任務(wù)按優(yōu)先級(jí)劃分,如果當(dāng)前運(yùn)行的實(shí)時(shí)任務(wù)比就緒隊(duì)列中任務(wù)的優(yōu)先級(jí)高,那么就繼續(xù)運(yùn)行優(yōu)先級(jí)高的任務(wù),直到該任務(wù)進(jìn)入等待狀態(tài)或者刪除,然后就調(diào)度就緒隊(duì)列中優(yōu)先級(jí)最高的任務(wù);如果當(dāng)前實(shí)時(shí)任務(wù)的優(yōu)先級(jí)沒(méi)有就緒隊(duì)列中實(shí)時(shí)任務(wù)的優(yōu)先級(jí)高,則中斷當(dāng)前任務(wù)的運(yùn)行,調(diào)度優(yōu)先級(jí)更高的實(shí)時(shí)任務(wù)運(yùn)行;空閑任務(wù)在沒(méi)有普通任務(wù)運(yùn)行和實(shí)時(shí)任務(wù)運(yùn)行時(shí)被調(diào)度,它在系統(tǒng)啟動(dòng)前被創(chuàng)建,一直生存在系統(tǒng)運(yùn)行期間,不能被刪除。所述任務(wù)創(chuàng)建單元用于嵌入式實(shí)時(shí)操作系統(tǒng)在編譯的時(shí)候預(yù)定義將要使用的任務(wù)數(shù);具體地,使用任務(wù)創(chuàng)建單元相關(guān)的函數(shù),int32taskcreate(int32type,int32priority,pvoidtaskaddr,pvoidtaskstack);該函數(shù)有四個(gè)參數(shù),分別是:任務(wù)類(lèi)型,任務(wù)優(yōu)先級(jí),任務(wù)地址,任務(wù)堆棧;任務(wù)類(lèi)型只能是time_task或real_task,任務(wù)優(yōu)先級(jí)是0-task_real_count之間的數(shù),任務(wù)地址是任務(wù)的入口函數(shù),任務(wù)堆棧是用戶根據(jù)特定任務(wù)的堆棧使用情況,自己定義的一段空間,這樣做是為了節(jié)約空間,減少不必要的浪費(fèi);函數(shù)開(kāi)始處先判斷任務(wù)類(lèi)型,如果是空閑任務(wù)則返回錯(cuò),如果是普通任務(wù),則從普通任務(wù)空閑列表中查找是否有可用的任務(wù)控制塊,如果沒(méi)有返回失敗,如果有,初始化任務(wù)控制塊,然后將任務(wù)添加到就緒列表中,返回任務(wù)id;如果是實(shí)時(shí)任務(wù),先判斷優(yōu)先級(jí)是否合法,然后判斷優(yōu)先級(jí)是否已經(jīng)被占用,如果兩個(gè)條件都順利通過(guò),則取任務(wù)控制塊并初始化,然后將該任務(wù)加入到實(shí)時(shí)任務(wù)就緒列表中,接著判斷操作系統(tǒng)是否已經(jīng)運(yùn)行,如果已經(jīng)運(yùn)行,則判斷當(dāng)前任務(wù)的優(yōu)先級(jí)是否比將要?jiǎng)?chuàng)建的任務(wù)低,如果當(dāng)前任務(wù)的優(yōu)先級(jí)低于將要?jiǎng)?chuàng)建的任務(wù),則調(diào)度,接著返回任務(wù)id。所述任務(wù)刪除單元用于釋放任務(wù)控制塊,并將任務(wù)控制塊返還給任務(wù)池;具體地,使用任務(wù)刪除單元相關(guān)的函數(shù),該函數(shù)先判斷任務(wù)是否存在,接著判斷要?jiǎng)h除任務(wù)是否為運(yùn)行態(tài),然后判斷任務(wù)類(lèi)型,如果是普通任務(wù),就將任務(wù)控制塊添加到空閑任務(wù)鏈表中,同時(shí)調(diào)度其他任務(wù)運(yùn)行;如果要?jiǎng)h除的任務(wù)不是運(yùn)行態(tài),依據(jù)任務(wù)狀態(tài)來(lái)刪除它,如果是等待狀態(tài),則將它從等待列表中刪除,如果是就緒狀態(tài),則將它從就緒狀態(tài)中刪除,最后如果該任務(wù)是普通任務(wù),將該任務(wù)控制塊添加到空閑任務(wù)列表中;所述任務(wù)掛起單元用于掛起當(dāng)前任務(wù)或者就緒狀態(tài)中的任務(wù);具體地,使用任務(wù)掛起單元相關(guān)的函數(shù),函數(shù)原型如下:voidtasksuspend(int32id){if(intflag){return;}if(id==task_idle){return;}if(tasktable[id]==system_null){return;}if((tasktable[id]->state&task_wait)?。?){return;}tasktable[id]->state=task_wait;tasktable[id]->state=tasktable[id]->state|task_suspend;if(id==curtcb->id){gethigherpriority();if(higherprirotiy?。絠nvalid_priority){nexttcb=tasktable[task_time_count+higherpriority];deletereadytable(higherprirotiy);}else{nexttcb=getlinkhead(&taskreadyhead,&taskreadytail);if(nexttcb==system_null){nexttcb=&taskidle;}}switch();}else{if(tasktable[id]->type==time_task){dellinkitem(&taskreadyhead,tasktable[id],&taskreadytail);}else{deletereadytable(tasktable[id]->priority);}}}函數(shù)開(kāi)始處先判斷任務(wù)是否存在,接著再判斷是否為空閑任務(wù),空閑任務(wù)不能被掛起,接著判斷任務(wù)狀態(tài),然后判斷是否掛起當(dāng)前任務(wù),如果是調(diào)度優(yōu)先級(jí)最高的實(shí)時(shí)任務(wù),如果沒(méi)有實(shí)時(shí)任務(wù)就調(diào)度下一個(gè)普通任務(wù),沒(méi)有普通任務(wù)就調(diào)度空閑任務(wù),如果掛起的不是當(dāng)前任務(wù),判斷掛起的任務(wù)類(lèi)型,普通任務(wù)就將該任務(wù)從普通任務(wù)就緒列表中刪除,實(shí)時(shí)任務(wù)就將該任務(wù)從實(shí)時(shí)任務(wù)就緒列表中刪除。所述任務(wù)喚醒單元用于將掛起的任務(wù)恢復(fù)到就緒狀態(tài)。具體地,使用任務(wù)喚醒單元相關(guān)的函數(shù),函數(shù)原型如下:voidtaskresume(int32id){if(intflag){return;}if(id==task_idle){return;}if(tasktable[id]==system_null){return;}if((tasktable[id]->state&task_wait)==0){return;}if(((tasktable[id]->state&0xff)&task_supend)==0){return;}tasktable[id]->state=task_ready;if(tasktable[id]->type==time_task){addlinktail(&taskreadyhead,tasktable[id],&taskreadytail);}else{if(tasktable[id]->priority>curtcb->priority){if(curtcb->type==time_task){addlinkhead(&taskreadyhead,curtcb,&taskreadytail);}else{addreadytable(curtcb->priority);}nexttcb=tasktable[id];switch();}else{addreadytable(tasktable[id]->priority);}}}該函數(shù)不能由中斷過(guò)程調(diào)用,同時(shí)不能喚醒空閑任務(wù),接著判斷任務(wù)是否存在,然后判斷任務(wù)狀態(tài),只有等待狀態(tài)且task_suspend置位的任務(wù)才能被喚醒;這里只要將任務(wù)狀態(tài)改為就緒態(tài);判斷它的類(lèi)型,普通任務(wù)直接將它添加到普通任務(wù)就緒列表中,實(shí)時(shí)任務(wù)則和當(dāng)前任務(wù)的優(yōu)先級(jí)比較,如果高于當(dāng)前任務(wù)優(yōu)先級(jí),則調(diào)度,否則將任務(wù)添加到就緒列表中。如果當(dāng)前任務(wù)是普通任務(wù)就將當(dāng)前任務(wù)添加到普通任務(wù)就緒列表表頭中,如果是實(shí)時(shí)任務(wù)則添加到實(shí)時(shí)任務(wù)就緒表中。進(jìn)一步地,所述時(shí)間管理單元具體包括任務(wù)延時(shí)單元和延時(shí)喚醒單元;所述任務(wù)延時(shí)單元用于將任務(wù)添加到延時(shí)等待隊(duì)列中,直到延時(shí)時(shí)間到期,或者延時(shí)喚醒該任務(wù);具體地,函數(shù)原型如下:voidtasktimedelay(int32count){if(curtcb->id==task_idle){return;}curtcb->state=task_wait;curtcb->state=curtcb->task_wait|task_delay;addlinktail(&taskwaithead,curtcb,&taskwaittail);if(curtcb->type==real_task){gethigherpriority();if(higherpriority?。絠nvalid_priority){nexttcb=tasktable[task_time_count+higherpriority];deletereadytable(higherpriority);switch();return;}}nexttcb=getlinkhead(&taskreadyhead,&taskreadytail);if(nexttcb==system_null){nexttcb=&taskidle;}switch();}函數(shù)首先判斷是否是空閑任務(wù)需要延時(shí),接著改變?nèi)蝿?wù)狀態(tài),然后將任務(wù)添加到等待列表中,判斷當(dāng)前任務(wù)是否是實(shí)時(shí)任務(wù),如果是則判斷就緒表中是否有實(shí)時(shí)任務(wù),有則調(diào)度它,如果沒(méi)有就調(diào)度普通任務(wù),取就緒表頭,如果就緒表中沒(méi)有任務(wù),則調(diào)度空閑任務(wù)。所述延時(shí)喚醒單元將延時(shí)睡眠的任務(wù)喚醒。具體地,函數(shù)原型如下:voidtasktimeresume(int32id){if(intflag){return;}if(id==task_idle){return;}if(id==curtcb->id){return;}if(tasktable[id]==system_null){return;}if((tasktable[id]->state&task_wait)==0){return;}if((tasktable[id]->state&task_delay)==0){return;}dellinkitem(&taskwaithead,tasktable[id],&taskwaittail);if(tasktable[id]->type==real_task){if(tasktable[id]->priority>curtcb->priority){nexttcb=tasktable[id];if(curtcb->type==real_task){addreadytable(curtcb->prirotiy);}else{addlinkhead(&taskreadyhead,curtcb,&taskreadytail);}switch();}else{addreadytable(tasktable[id]->priority);}}else{addtailhead(&taskreadyhead,tasktable[id],&taskreadytail);}}該函數(shù)不能由中斷調(diào)用,首先檢查被喚醒任務(wù)是否是空閑任務(wù)或者任務(wù)本身,因?yàn)檫@兩個(gè)任務(wù)都是不能被喚醒的,接著檢查任務(wù)是否存在,然后檢查任務(wù)狀態(tài)是否正確;接下來(lái)從等待隊(duì)列中刪除該任務(wù),如果喚醒的任務(wù)是實(shí)時(shí)任務(wù),那么和當(dāng)前任務(wù)的優(yōu)先級(jí)比較,如果高出,則調(diào)度它,同時(shí)保存當(dāng)前任務(wù)到就緒隊(duì)列中,否則加入實(shí)時(shí)任務(wù)就緒隊(duì)列,如果喚醒的任務(wù)是普通任務(wù),直接加入到普通任務(wù)就緒列表中。進(jìn)一步地,所述信號(hào)量管理單元具體包括同步信號(hào)量管理單元和互斥信號(hào)量管理單元;所述同步信號(hào)量管理單元用于處理非獨(dú)占資源,每個(gè)項(xiàng)目可用就釋放一個(gè)信號(hào)量,直到釋放滿,同時(shí)任務(wù)可以得到釋放的信號(hào)量取走這些可用的項(xiàng)目;所述互斥信號(hào)量管理單元用于處理獨(dú)占式資源,任何時(shí)候只能有一個(gè)任務(wù)占用它,下一個(gè)任務(wù)必須等待前一個(gè)任務(wù)釋放資源后才可以繼續(xù)使用。進(jìn)一步地,所述內(nèi)存管理單元具體包括:內(nèi)存初始化將系統(tǒng)固定的大內(nèi)存段分成一定數(shù)量小內(nèi)存段,設(shè)置內(nèi)存使用表,初始化內(nèi)存結(jié)構(gòu)各個(gè)值;具體地,初始化內(nèi)存結(jié)構(gòu)各個(gè)值,函數(shù)原型如下:voidmeminit(pvoidstartaddr,int32datasize){int32i=0;memdata.startaddr=startaddr;memdata.freecount=mem_count;memdata.datasize=datasize;for(i=0;i<(mem_count/32);i++){map[i]=0xffffffff;}}該函數(shù)首先初始化數(shù)據(jù)結(jié)構(gòu)各個(gè)值,然后初始化內(nèi)存使用表。從空閑內(nèi)存中取一塊出來(lái)給任務(wù)使用;具體地,函數(shù)原型如下:pvoidgetmem(){int32index;if(memdata.freecount<=0){returnsystem_null;}for(i=0;i<(mem_count/32);i++){if(map[i]?。?){index=i*32+getfreemem(map[i]);memdata.freecount--;return(pvoid)(startaddr+index*memdata.datasize);}}returnsystem_null;}函數(shù)首先判斷是否有空閑內(nèi)存,然后找到最靠前的空閑任務(wù),返回給任務(wù)。任務(wù)使用完內(nèi)存后,將釋放的內(nèi)存添加到空閑表中。具體地,函數(shù)原型如下:voidputmem(pvoidaddr){int32index;if(addr==system_null){return;}index=((int32)(addr–memdata.startaddr))/memdata.datasize;map[index/32]=map[index/32]|(1<<(32-index%32));memdata.freecount++;}函數(shù)首先判斷地址是否合法,然后將這塊內(nèi)存添加到空閑表中。進(jìn)一步地,所述內(nèi)核還包括郵箱管理單元,所述郵箱管理單元用于任務(wù)可使用郵箱給另一個(gè)任務(wù)發(fā)送特定的數(shù)據(jù)。所述郵箱管理單元具體包括郵箱創(chuàng)建單元、郵箱刪除單元、郵箱等待單元和郵箱釋放單元;所述郵箱創(chuàng)建單元用于嵌入式實(shí)時(shí)操作系統(tǒng)為郵箱維護(hù)一個(gè)結(jié)構(gòu)池,郵箱創(chuàng)建單元取結(jié)構(gòu)池中空閑結(jié)構(gòu),并對(duì)郵箱結(jié)構(gòu)進(jìn)行初始化;所述郵箱刪除單元用于郵箱在不使用時(shí),將郵箱結(jié)構(gòu)放入緩沖池中以給其他任務(wù)使用;所述郵箱等待單元用于等待所需資源條件得到滿足;所述郵箱釋放單元用于當(dāng)任務(wù)消息資源準(zhǔn)備好以后,通過(guò)郵箱傳遞、釋放郵箱。進(jìn)一步地,所述郵箱等待單元具體用于:將郵箱等待單元分延時(shí)等待、一直等待和不等待三種情況;延時(shí)等待是指只等待規(guī)定的時(shí)間,等待時(shí)間到期后,如果資源條件還沒(méi)滿足,則返回超時(shí);一直等待是指只要所需資源條件不滿足,則將任務(wù)一直掛起,直到條件滿足任務(wù)才被喚醒;不等待是指資源不滿足時(shí),任務(wù)不被掛起,任務(wù)繼續(xù)運(yùn)行。參照?qǐng)D2所示,在具體應(yīng)用中本發(fā)明的嵌入式實(shí)時(shí)操作系統(tǒng)的一種方法流程為:系統(tǒng)得電運(yùn)行后,首先對(duì)寄存器、中斷向量表、進(jìn)程表、定時(shí)器進(jìn)行初始化操作,然后設(shè)置cpu的工作模式,啟動(dòng)空閑進(jìn)程任務(wù),使系統(tǒng)循環(huán)工作,直到設(shè)備斷電才停止運(yùn)行工作。最后需要說(shuō)明的是,上述描述為本發(fā)明的優(yōu)選實(shí)施例,本領(lǐng)域的普通技術(shù)人員在本發(fā)明的啟示下,在不違背本發(fā)明宗旨及權(quán)利要求的前提下,可以做出多種類(lèi)似的表示,這樣的變換均落入本發(fā)明的保護(hù)范圍之內(nèi)。當(dāng)前第1頁(yè)12當(dāng)前第1頁(yè)12
當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
正镶白旗| 广平县| 竹北市| 巩留县| 平顶山市| 永清县| 汉中市| 介休市| 安乡县| 渝北区| 婺源县| 临泽县| 囊谦县| 饶河县| 安阳市| 许昌市| 台前县| 彰武县| 莱芜市| 宁波市| 胶州市| 永济市| 邢台市| 东乡| 兰考县| 东莞市| 禹城市| 安吉县| 大冶市| 贡山| 泰州市| 潮安县| 塔城市| 吕梁市| 洛隆县| 林甸县| 祁阳县| 临颍县| 嘉善县| 平南县| 德阳市|