新四季網

嵌入式實時作業系統的製作方法

2023-06-24 02:59:06 2

本發明屬於計算機
技術領域:
:,具體涉及到一種嵌入式實時作業系統。
背景技術:
::隨著嵌入式技術的普及,越來越多的電子產品使用嵌入式系統開發,而嵌入式作業系統是嵌入式系統的核心,所以嵌入式作業系統的性能直接影響到產品的性能。和通用作業系統相比,嵌入式作業系統一般都是實時性的。目前市場中流行的嵌入式實時作業系統有:vxworks、uclinux和wince。vxworks作業系統是美國windriver公司於1983年設計開發的一種嵌入式實時作業系統,它適用範圍廣,適用性強,可靠性高,可用於所有流行的cpu平臺。美國火星探測器所使用的嵌入式實時作業系統就是vxworks,它的價格也很昂貴,對於成本要求很高的產品不太適合。uclinux是根據特定的硬體需求從linux內核剪裁出來的,它的特點是功能強大,幾乎支持所有功能,而且是免費的,所以現在一半的嵌入式系統都是使用此作業系統。它的缺點就是剪裁後佔用空間依舊很大,這樣硬體成本得不到有效控制,不太適合對用戶交互要求很少的工業控制領域。wince是微軟開發得一個開放得,可升級得32位嵌入式實時作業系統。它得特點是功能強大,圖像處理能力強,編程接口簡單易學,和通用編程幾乎沒什麼差別,但是對作業系統得剪裁還是很麻煩得,同樣它的價格不菲。因此,現有技術中的嵌入式實時作業系統存在價格昂貴、所佔用空間大、不適合應用於工業控制領域的缺陷。技術實現要素:本發明提出一種嵌入式實時作業系統,用於實現所佔空間小,實時性得到提高的嵌入式實時作業系統。本發明採取的技術方案為:一種嵌入式實時作業系統,包括應用層和內核;所述應用層與內核之間進行數據交互;所述應用層包括存儲系統、設備驅動單元、虛擬內存單元和網絡協議棧;所述內核包括任務管理單元、時間管理單元、信號量管理單元、內存管理單元、cpu單元和icp單元;所述嵌入式實時作業系統在處理任務時,所述任務管理單元將要處理的任務進行優先級劃分,並與正在處理任務的優先級進行比較,將優先級低的任務通過所述時間管理單元進行延時,然後所述信號量管理單元用於保證被延時的任務不被並發調用,並且內存管理單元為被執行的任務提供所需的內存,最後通過icp單元進行相互通信,cpu單元進行任務數據的處理和指令的執行。優選的,所述任務管理單元具體包括,任務調度單元、任務創建單元、任務刪除單元、任務掛起單元和任務喚醒單元;所述任務調度單元用於對嵌入式實時作業系統中的普通任務、實時任務和空閒任務進行調度;所述任務創建單元用於嵌入式實時作業系統在編譯的時候預定義將要使用的任務數;所述任務刪除單元用於釋放任務控制塊,並將任務控制塊返還給任務池;所述任務掛起單元用於掛起當前任務或者就緒狀態中的任務;所述任務喚醒單元用於將掛起的任務恢復到就緒狀態。優選的,所述任務調度單元具體用於:普通任務在系統中按時間片方式調度,即每個普通任務分配一固定的時間片,當它擁有的時間片用完時,就調度就緒隊列中下一個普通任務;實時任務的調度策略是,普通任務運行過程中,如果實時任務等待的資源可用,就中斷普通任務的運行,調度實時任務運行;並將實時任務按優先級劃分,如果當前運行的實時任務比就緒隊列中任務的優先級高,那麼就繼續運行優先級高的任務,直到該任務進入等待狀態或者刪除,然後就調度就緒隊列中優先級最高的任務;如果當前實時任務的優先級沒有就緒隊列中實時任務的優先級高,則中斷當前任務的運行,調度優先級更高的實時任務運行;空閒任務在沒有普通任務運行和實時任務運行時被調度,它在系統啟動前被創建,一直生存在系統運行期間,不能被刪除。優選的,所述時間管理單元具體包括任務延時單元和延時喚醒單元;所述任務延時單元用於將任務添加到延時等待隊列中,直到延時時間到期,或者延時喚醒該任務;所述延時喚醒單元將延時睡眠的任務喚醒。優選的,所述信號量管理單元具體包括同步信號量管理單元和互斥信號量管理單元;所述同步信號量管理單元用於處理非獨佔資源,每個項目可用就釋放一個信號量,直到釋放滿,同時任務可以得到釋放的信號量取走這些可用的項目;所述互斥信號量管理單元用於處理獨佔式資源,任何時候只能有一個任務佔用它,下一個任務必須等待前一個任務釋放資源後才可以繼續使用。優選的,所述內存管理單元具體包括:內存初始化將系統固定的大內存段分成一定數量小內存段,設置內存使用表,初始化內存結構各個值;從空閒內存中取一塊出來給任務使用;任務使用完內存後,將釋放的內存添加到空閒表中。優選的,所述內核還包括郵箱管理單元,所述郵箱管理單元用於任務可使用郵箱給另一個任務發送特定的數據。優選的,所述郵箱管理單元具體包括郵箱創建單元、郵箱刪除單元、郵箱等待單元和郵箱釋放單元;所述郵箱創建單元用於嵌入式實時作業系統為郵箱維護一個結構池,郵箱創建單元取結構池中空閒結構,並對郵箱結構進行初始化;所述郵箱刪除單元用於郵箱在不使用時,將郵箱結構放入緩衝池中以給其他任務使用;所述郵箱等待單元用於等待所需資源條件得到滿足;所述郵箱釋放單元用於當任務消息資源準備好以後,通過郵箱傳遞、釋放郵箱。優選的,所述郵箱等待單元具體用於:將郵箱等待單元分延時等待、一直等待和不等待三種情況;延時等待是指只等待規定的時間,等待時間到期後,如果資源條件還沒滿足,則返回超時;一直等待是指只要所需資源條件不滿足,則將任務一直掛起,直到條件滿足任務才被喚醒;不等待是指資源不滿足時,任務不被掛起,任務繼續運行。採用上述技術方案,具有以下優點:本發明提出的嵌入式實時作業系統,通過內存管理單元將系統的大內存段分成一定數量小內存段,從空閒內存中取一塊出來給任務使用,任務使用完內存後,將釋放的內存添加到空閒表中;充分的利用了內存資源,優化了內存的使用率,使本發明所佔空間小;並且在任務調度單元中,將實時任務分為不同的優先級,最高優先級優先佔有cpu時間片,只有當高優先級睡眠時低優先級的進程才佔有時間片,一旦高優先級任務喚醒單元馬上又佔有cpu時間片,響應一個事件,從中斷、任務調度單元、到函數調用、均按預期及時進行,做到及時響應,提高本發明的實時性。附圖說明圖1為本發明的系統結構圖;圖2為本發明的一種方法流程圖。具體實施方式為使本發明要解決的技術問題、技術方案和優點更加清楚,下面將結合附圖及具體實施例進行詳細描述,這裡的描述不意味著對應於實施例中陳述的具體實例的所有主題都在權利要求中引用了。ipc(inter-processcommunication)進程間通信就是指多個任務進程之間相互通信,交換信息的方法。請參照圖1所示,一種嵌入式實時作業系統,包括應用層和內核;所述應用層與內核之間進行數據交互;所述應用層包括存儲系統、設備驅動單元、虛擬內存單元和網絡協議棧;所述內核包括任務管理單元、時間管理單元、信號量管理單元、內存管理單元、cpu單元和icp單元;所述嵌入式實時作業系統在處理任務時,所述任務管理單元將要處理的任務進行優先級劃分,並與正在處理任務的優先級進行比較,將優先級低的任務通過所述時間管理單元進行延時,然後所述信號量管理單元用於保證被延時的任務不被並發調用,並且內存管理單元為被執行的任務提供所需的內存,最後通過icp單元進行相互通信,cpu單元進行任務數據的處理和指令的執行。進一步地,所述任務管理單元具體包括,任務調度單元、任務創建單元、任務刪除單元、任務掛起單元和任務喚醒單元;所述任務調度單元用於對嵌入式實時作業系統中的普通任務、實時任務和空閒任務進行調度;具體地,所述任務調度單元具體用於:普通任務在系統中按時間片方式調度,即每個普通任務分配一固定的時間片,當它擁有的時間片用完時,就調度就緒隊列中下一個普通任務;實時任務的調度策略是,普通任務運行過程中,如果實時任務等待的資源可用,就中斷普通任務的運行,調度實時任務運行;並將實時任務按優先級劃分,如果當前運行的實時任務比就緒隊列中任務的優先級高,那麼就繼續運行優先級高的任務,直到該任務進入等待狀態或者刪除,然後就調度就緒隊列中優先級最高的任務;如果當前實時任務的優先級沒有就緒隊列中實時任務的優先級高,則中斷當前任務的運行,調度優先級更高的實時任務運行;空閒任務在沒有普通任務運行和實時任務運行時被調度,它在系統啟動前被創建,一直生存在系統運行期間,不能被刪除。所述任務創建單元用於嵌入式實時作業系統在編譯的時候預定義將要使用的任務數;具體地,使用任務創建單元相關的函數,int32taskcreate(int32type,int32priority,pvoidtaskaddr,pvoidtaskstack);該函數有四個參數,分別是:任務類型,任務優先級,任務地址,任務堆棧;任務類型只能是time_task或real_task,任務優先級是0-task_real_count之間的數,任務地址是任務的入口函數,任務堆棧是用戶根據特定任務的堆棧使用情況,自己定義的一段空間,這樣做是為了節約空間,減少不必要的浪費;函數開始處先判斷任務類型,如果是空閒任務則返回錯,如果是普通任務,則從普通任務空閒列表中查找是否有可用的任務控制塊,如果沒有返回失敗,如果有,初始化任務控制塊,然後將任務添加到就緒列表中,返回任務id;如果是實時任務,先判斷優先級是否合法,然後判斷優先級是否已經被佔用,如果兩個條件都順利通過,則取任務控制塊並初始化,然後將該任務加入到實時任務就緒列表中,接著判斷作業系統是否已經運行,如果已經運行,則判斷當前任務的優先級是否比將要創建的任務低,如果當前任務的優先級低於將要創建的任務,則調度,接著返回任務id。所述任務刪除單元用於釋放任務控制塊,並將任務控制塊返還給任務池;具體地,使用任務刪除單元相關的函數,該函數先判斷任務是否存在,接著判斷要刪除任務是否為運行態,然後判斷任務類型,如果是普通任務,就將任務控制塊添加到空閒任務鍊表中,同時調度其他任務運行;如果要刪除的任務不是運行態,依據任務狀態來刪除它,如果是等待狀態,則將它從等待列表中刪除,如果是就緒狀態,則將它從就緒狀態中刪除,最後如果該任務是普通任務,將該任務控制塊添加到空閒任務列表中;所述任務掛起單元用於掛起當前任務或者就緒狀態中的任務;具體地,使用任務掛起單元相關的函數,函數原型如下:voidtasksuspend(int32id){if(intflag){return;}if(id==task_idle){return;}if(tasktable[id]==system_null){return;}if((tasktable[id]->state&task_wait)!=0){return;}tasktable[id]->state=task_wait;tasktable[id]->state=tasktable[id]->state|task_suspend;if(id==curtcb->id){gethigherpriority;if(higherprirotiy!=invalid_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);}}}函數開始處先判斷任務是否存在,接著再判斷是否為空閒任務,空閒任務不能被掛起,接著判斷任務狀態,然後判斷是否掛起當前任務,如果是調度優先級最高的實時任務,如果沒有實時任務就調度下一個普通任務,沒有普通任務就調度空閒任務,如果掛起的不是當前任務,判斷掛起的任務類型,普通任務就將該任務從普通任務就緒列表中刪除,實時任務就將該任務從實時任務就緒列表中刪除。所述任務喚醒單元用於將掛起的任務恢復到就緒狀態。具體地,使用任務喚醒單元相關的函數,函數原型如下: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);}}}該函數不能由中斷過程調用,同時不能喚醒空閒任務,接著判斷任務是否存在,然後判斷任務狀態,只有等待狀態且task_suspend置位的任務才能被喚醒;這裡只要將任務狀態改為就緒態;判斷它的類型,普通任務直接將它添加到普通任務就緒列表中,實時任務則和當前任務的優先級比較,如果高於當前任務優先級,則調度,否則將任務添加到就緒列表中。如果當前任務是普通任務就將當前任務添加到普通任務就緒列表表頭中,如果是實時任務則添加到實時任務就緒表中。進一步地,所述時間管理單元具體包括任務延時單元和延時喚醒單元;所述任務延時單元用於將任務添加到延時等待隊列中,直到延時時間到期,或者延時喚醒該任務;具體地,函數原型如下: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!=invalid_priority){nexttcb=tasktable[task_time_count+higherpriority];deletereadytable(higherpriority);switch;return;}}nexttcb=getlinkhead(&taskreadyhead,&taskreadytail);if(nexttcb==system_null){nexttcb=&taskidle;}switch;}函數首先判斷是否是空閒任務需要延時,接著改變任務狀態,然後將任務添加到等待列表中,判斷當前任務是否是實時任務,如果是則判斷就緒表中是否有實時任務,有則調度它,如果沒有就調度普通任務,取就緒表頭,如果就緒表中沒有任務,則調度空閒任務。所述延時喚醒單元將延時睡眠的任務喚醒。具體地,函數原型如下: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);}}該函數不能由中斷調用,首先檢查被喚醒任務是否是空閒任務或者任務本身,因為這兩個任務都是不能被喚醒的,接著檢查任務是否存在,然後檢查任務狀態是否正確;接下來從等待隊列中刪除該任務,如果喚醒的任務是實時任務,那麼和當前任務的優先級比較,如果高出,則調度它,同時保存當前任務到就緒隊列中,否則加入實時任務就緒隊列,如果喚醒的任務是普通任務,直接加入到普通任務就緒列表中。進一步地,所述信號量管理單元具體包括同步信號量管理單元和互斥信號量管理單元;所述同步信號量管理單元用於處理非獨佔資源,每個項目可用就釋放一個信號量,直到釋放滿,同時任務可以得到釋放的信號量取走這些可用的項目;所述互斥信號量管理單元用於處理獨佔式資源,任何時候只能有一個任務佔用它,下一個任務必須等待前一個任務釋放資源後才可以繼續使用。進一步地,所述內存管理單元具體包括:內存初始化將系統固定的大內存段分成一定數量小內存段,設置內存使用表,初始化內存結構各個值;具體地,初始化內存結構各個值,函數原型如下: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;}}該函數首先初始化數據結構各個值,然後初始化內存使用表。從空閒內存中取一塊出來給任務使用;具體地,函數原型如下:pvoidgetmem{int32index;if(memdata.freecount<=0){returnsystem_null;}for(i=0;i<(mem_count/32);i++){if(map[i]!=0){index=i*32+getfreemem(map[i]);memdata.freecount--;return(pvoid)(startaddr+index*memdata.datasize);}}returnsystem_null;}函數首先判斷是否有空閒內存,然後找到最靠前的空閒任務,返回給任務。任務使用完內存後,將釋放的內存添加到空閒表中。具體地,函數原型如下: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++;}函數首先判斷地址是否合法,然後將這塊內存添加到空閒表中。進一步地,所述內核還包括郵箱管理單元,所述郵箱管理單元用於任務可使用郵箱給另一個任務發送特定的數據。所述郵箱管理單元具體包括郵箱創建單元、郵箱刪除單元、郵箱等待單元和郵箱釋放單元;所述郵箱創建單元用於嵌入式實時作業系統為郵箱維護一個結構池,郵箱創建單元取結構池中空閒結構,並對郵箱結構進行初始化;所述郵箱刪除單元用於郵箱在不使用時,將郵箱結構放入緩衝池中以給其他任務使用;所述郵箱等待單元用於等待所需資源條件得到滿足;所述郵箱釋放單元用於當任務消息資源準備好以後,通過郵箱傳遞、釋放郵箱。進一步地,所述郵箱等待單元具體用於:將郵箱等待單元分延時等待、一直等待和不等待三種情況;延時等待是指只等待規定的時間,等待時間到期後,如果資源條件還沒滿足,則返回超時;一直等待是指只要所需資源條件不滿足,則將任務一直掛起,直到條件滿足任務才被喚醒;不等待是指資源不滿足時,任務不被掛起,任務繼續運行。參照圖2所示,在具體應用中本發明的嵌入式實時作業系統的一種方法流程為:系統得電運行後,首先對寄存器、中斷向量表、進程表、定時器進行初始化操作,然後設置cpu的工作模式,啟動空閒進程任務,使系統循環工作,直到設備斷電才停止運行工作。最後需要說明的是,上述描述為本發明的優選實施例,本領域的普通技術人員在本發明的啟示下,在不違背本發明宗旨及權利要求的前提下,可以做出多種類似的表示,這樣的變換均落入本發明的保護範圍之內。當前第1頁12當前第1頁12

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀