專利名稱:實時操作系統(tǒng)環(huán)境下多任務(wù)應(yīng)用軟件模塊的管理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及軟件模塊管理技術(shù),特別是指一種實時操作系統(tǒng)環(huán)境下多任務(wù)應(yīng)用軟件模塊的管理方法。
背景技術(shù):
隨著科技的發(fā)展,嵌入式系統(tǒng)的應(yīng)用日趨廣泛。嵌入式系統(tǒng)一般指非PC系統(tǒng),包括硬件和軟件兩部分,其中,軟件部分包括實時操作系統(tǒng)軟件和應(yīng)用軟件。應(yīng)用軟件控制著系統(tǒng)的運作和行為,而操作系統(tǒng)控制著應(yīng)用程序與硬件的交互作用。
其中,任務(wù)是實時操作系統(tǒng)中參與CPU調(diào)度的單位,不同的任務(wù)有自己的任務(wù)上下文(Context)和堆棧空間,各任務(wù)之間共享內(nèi)存,每個任務(wù)都有相應(yīng)的任務(wù)入口函數(shù),不同的任務(wù)可以有相同的任務(wù)入口函數(shù)。每個任務(wù)都有優(yōu)先級,實時操作系統(tǒng)一般采用優(yōu)先級搶占的調(diào)度策略,在多個任務(wù)就緒的情況下,只有優(yōu)先級最高的就緒任務(wù)能夠獲得CPU運行。
在實時操作系統(tǒng)環(huán)境下,整個實時應(yīng)用程序按任務(wù)被分割成若干個獨立的軟件模塊,每個模塊處理應(yīng)用程序的一部分功能,各個軟件模塊功能相對獨立,耦合性盡量地小并通過多任務(wù)通訊機(jī)制,如共享內(nèi)存、消息隊列、管道、信號量等,完成模塊之間的同步和協(xié)調(diào)工作。
但是,這種按照任務(wù)來劃分軟件模塊的方法需要上層應(yīng)用充分了解多任務(wù)操作系統(tǒng)軟件的原理和機(jī)制,實際實現(xiàn)中,需要應(yīng)用軟件開發(fā)人員綜合考慮任務(wù)間通訊、臨界資源的保護(hù)、同步、互斥、任務(wù)間死鎖的產(chǎn)生等因素,否則將因不熟悉實時操作系統(tǒng)的機(jī)制導(dǎo)致一系列應(yīng)用軟件缺陷。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的目的在于提供一種實時操作系統(tǒng)環(huán)境下多任務(wù)應(yīng)用軟件模塊的管理方法,能夠屏蔽掉實時多任務(wù)應(yīng)用軟件開發(fā)過程中任務(wù)間臨界資源保護(hù)、同步、互斥,防止死鎖等問題,簡化應(yīng)用程序開發(fā)過程。
為了達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實現(xiàn)的本發(fā)明提供了一種實時操作系統(tǒng)環(huán)境下多任務(wù)應(yīng)用軟件模塊的管理方法,在多任務(wù)應(yīng)用程序與實時操作系統(tǒng)之間設(shè)置應(yīng)用軟件模塊管理層,該方法還包括建立應(yīng)用軟件模塊與任務(wù)之間關(guān)系的方法和應(yīng)用軟件模塊之間通訊的方法;所述建立應(yīng)用軟件模塊與任務(wù)之間關(guān)系的方法,包括將整個應(yīng)用程序劃分為一個或一個以上功能標(biāo)識(FID),為各FID配置優(yōu)先級;將每個FID劃分為一個或一個以上處理標(biāo)識(PID);應(yīng)用軟件模塊管理層為每個FID登記優(yōu)先級、創(chuàng)建消息處理任務(wù)和消息隊列,為每個PID登記功能處理函數(shù);所述應(yīng)用軟件模塊之間通訊的方法,包括a.源PID通過應(yīng)用軟件模塊管理層申請消息包,源PID填寫并發(fā)送該消息包;b.應(yīng)用軟件模塊管理層將該消息包添加至目的PID所屬FID的消息隊列;c.實時操作系統(tǒng)根據(jù)FID的優(yōu)先級調(diào)度該目的PID所屬FID的消息處理任務(wù);d.該消息處理任務(wù)從自身的消息隊列中讀取步驟b所述的消息包,通過應(yīng)用軟件模塊管理層調(diào)用目的PID的功能函數(shù)。
建立應(yīng)用軟件模塊與任務(wù)之間關(guān)系的方法中,所述劃分FID的方法為根據(jù)應(yīng)用程序?qū)崿F(xiàn)的基本功能以及各基本功能的優(yōu)先級劃分。
建立應(yīng)用軟件模塊與任務(wù)之間關(guān)系的方法中,所述劃分PID的方法為根據(jù)各FID內(nèi)部實現(xiàn)的具體功能劃分。
建立應(yīng)用軟件模塊與任務(wù)之間關(guān)系的方法中,所述應(yīng)用軟件模塊管理層還進(jìn)一步為FID登記一個或一個以上自處理任務(wù)及其優(yōu)先級。
建立應(yīng)用軟件模塊與任務(wù)之間關(guān)系的方法中,所述FID的消息隊列按優(yōu)先級劃分為一個以上的消息隊列。
建立應(yīng)用軟件模塊與任務(wù)之間關(guān)系的方法中,所述應(yīng)用軟件模塊管理層通過運行應(yīng)用程序提供的配置文件完成FID和PID的登記。
步驟b中,應(yīng)用軟件模塊管理層根據(jù)消息包中的目的PID ID將該消息包添加至目的PID所屬FID的消息隊列。
步驟c中,實時操作系統(tǒng)調(diào)度消息處理任務(wù)的方法為實時操作系統(tǒng)通過應(yīng)用軟件模塊管理層提供的任務(wù)接口按應(yīng)用軟件模塊管理層登記的消息處理任務(wù)優(yōu)先級進(jìn)行調(diào)度。
步驟d中,所述消息處理任務(wù)讀取消息包時,應(yīng)用軟件模塊管理層為該消息處理任務(wù)加入信號量保護(hù)。
在所述步驟d之后,該方法進(jìn)一步包括應(yīng)用軟件模塊管理層判斷目的PID是否轉(zhuǎn)發(fā)該消息包,如果是,轉(zhuǎn)發(fā)該消息包;否則釋放該消息包。
其中,所述判斷是否轉(zhuǎn)發(fā)消息包的方法為通過識別該消息包的狀態(tài)進(jìn)行判斷。
其中,所述目的PID轉(zhuǎn)發(fā)消息包時,該目的PID根據(jù)當(dāng)前接收方PID的ID對該消息包的目的PID ID進(jìn)行修改,并再次發(fā)送此消息包;所述轉(zhuǎn)發(fā)消息包為執(zhí)行步驟b。
其中,源PID對應(yīng)的CPU與目的PID對應(yīng)的CPU不相同時,將源PID對應(yīng)的CPU作為源CPU,目的PID對應(yīng)的CPU作為目的CPU,在執(zhí)行所述步驟b之前,該方法進(jìn)一步包括源CPU對應(yīng)的應(yīng)用軟件模塊管理層通過網(wǎng)絡(luò)發(fā)送消息包至目的CPU對應(yīng)的應(yīng)用軟件模塊管理層,收到消息包的應(yīng)用軟件模塊管理層申請并填寫消息包;
則步驟b至步驟d所述應(yīng)用軟件模塊管理層為目的CPU對應(yīng)的應(yīng)用軟件模塊管理層。
其中,根據(jù)當(dāng)前要發(fā)送消息包中源CPU ID和目的CPU ID確定源PID對應(yīng)的CPU與目的PID對應(yīng)的CPU是否相同。
其中,所述通過網(wǎng)絡(luò)發(fā)送該消息包的方法為應(yīng)用軟件模塊管理層通過自身為應(yīng)用程序提供的目的CPU對應(yīng)的網(wǎng)絡(luò)通訊接口進(jìn)行發(fā)送。
其中,所述通過網(wǎng)絡(luò)發(fā)送消息包的同時,源CPU對應(yīng)的應(yīng)用軟件模塊管理層釋放該消息包。
其中,所述應(yīng)用軟件模塊管理層申請消息包之后,進(jìn)一步保存用于指示該消息包在實時操作系統(tǒng)中內(nèi)存首地址的指針;步驟b中,所述應(yīng)用軟件模塊管理層將消息包添加至消息隊列的處理中,所添加的是消息包的指針;步驟d中,所述讀取消息包的處理中,消息處理任務(wù)通過識別消息隊列中該消息包的指針讀取該消息包。
綜上所述,本發(fā)明關(guān)鍵在于在多任務(wù)應(yīng)用程序與實時操作系統(tǒng)之間增加了應(yīng)用軟件模塊管理層,使用建立應(yīng)用軟件模塊與任務(wù)之間關(guān)系的方法,將整個應(yīng)用程序劃分為一個或多個FID,將各FID劃分為一個或多個PID,由應(yīng)用軟件模塊管理層為FID登記優(yōu)先級、創(chuàng)建消息處理任務(wù)和消息隊列,為PID登記功能處理函數(shù)。在應(yīng)用軟件模塊管理層建立起FID、PID、以及消息處理任務(wù)之間的關(guān)系之后,使用所述應(yīng)用軟件模塊之間通訊的方法來完成應(yīng)用軟件模塊之間的通訊;其中,源PID通過發(fā)送消息包來與目的PID進(jìn)行通訊;應(yīng)用軟件模塊管理層負(fù)責(zé)申請消息包,并將源PID所填寫的消息包添加至目的PID所屬FID的消息隊列;實時操作系統(tǒng)根據(jù)FID的優(yōu)先級調(diào)度FID的消息處理任務(wù),該消息處理任務(wù)從自身的消息隊列中讀取消息包,通過應(yīng)用軟件模塊管理層調(diào)用目的PID的功能函數(shù),完成通訊過程。
可見,本方法通過按照FID、PID以及消息處理任務(wù)之間關(guān)系組織應(yīng)用軟件模塊,并基于此種關(guān)系使用本發(fā)明方法進(jìn)行應(yīng)用軟件模塊之間的通訊,屏蔽了實時多任務(wù)軟件中任務(wù)劃分、任務(wù)間通訊、同步、互斥、臨界區(qū)保護(hù)以及函數(shù)重入等復(fù)雜的技術(shù)問題,提高了多任務(wù)應(yīng)用軟件的開發(fā)效率,避免了因不熟悉多任務(wù)特點造成的多任務(wù)應(yīng)用軟件系統(tǒng)缺陷。
圖1為本發(fā)明方法中FID、PID以及任務(wù)之間關(guān)系示意圖;圖2為本發(fā)明方法的消息包發(fā)送一較佳實施例處理流程示意圖;圖3為本發(fā)明方法的消息包處理一較佳實施例處理流程示意圖。
具體實施例方式
下面結(jié)合附圖對本發(fā)明作進(jìn)一步的詳細(xì)描述。
本發(fā)明所提供的實時操作系統(tǒng)環(huán)境下多任務(wù)應(yīng)用軟件模塊管理方法,在多任務(wù)應(yīng)用程序與實時操作系統(tǒng)之間增加了應(yīng)用軟件模塊管理層,該方法還包括建立應(yīng)用軟件模塊與任務(wù)之間關(guān)系的方法、和應(yīng)用軟件模塊之間通訊的方法。
所述建立應(yīng)用軟件模塊與任務(wù)之間關(guān)系的方法,包括將整個應(yīng)用程序劃分為一個或多個FID,為各FID配置優(yōu)先級;將每一個FID劃分為一個或多個PID;應(yīng)用軟件模塊管理層為每一個FID登記優(yōu)先級、創(chuàng)建消息處理任務(wù)和消息隊列,為每一個PID登記功能處理函數(shù)。
其中,可以根據(jù)應(yīng)用程序?qū)崿F(xiàn)的基本功能以及各基本功能的優(yōu)先級來劃分FID,并根據(jù)各FID內(nèi)部實現(xiàn)的具體功能劃分PID。比如涉及多協(xié)議層功能處理的系統(tǒng),可以將若干協(xié)議層劃分為一個FID,并且通常較底層協(xié)議層功能模塊優(yōu)先級較高,因此,將位于底層的協(xié)議層劃分為優(yōu)先級高的FID,將位于高層次的協(xié)議層劃分為優(yōu)先級低的FID;然后,針對各FID對應(yīng)的協(xié)議層的功能處理,將各FID劃分為一個或多個PID,可以將FID按其所包含的協(xié)議層劃分PID,也可以根據(jù)需要將其包含的每一個協(xié)議層劃分為多個PID。
為了實現(xiàn)應(yīng)用程序功能的擴(kuò)展,本發(fā)明應(yīng)用軟件模塊管理層還提供為FID登記自處理任務(wù)以及該自處理任務(wù)優(yōu)先級的功能,應(yīng)用程序需要自己定義任務(wù)的優(yōu)先級和任務(wù)入口函數(shù)。該自處理任務(wù)用于完成一些特殊功能處理,比如一些軟件模塊需要周期性地完成一些功能,如,周期性檢測底層鏈路的連接狀態(tài)、或檢查資源狀況等等。
應(yīng)用程序開發(fā)時,按上述原則劃分FID和PID、定義PID對應(yīng)的功能處理函數(shù)、配置FID的自處理任務(wù)及任務(wù)入口函數(shù),并將FID與PID的從屬關(guān)系、PID對應(yīng)的功能處理函數(shù)、以及自處理任務(wù)組織成配置文件,在應(yīng)用程序運行時,本發(fā)明應(yīng)用軟件模塊管理層通過運行配置文件中FID和PID的初始化程序,完成FID優(yōu)先級、FID和PID之間從屬關(guān)系、以及FID的自處理任務(wù)的登記,按FID的優(yōu)先級為各FID在實時操作系統(tǒng)中創(chuàng)建消息處理任務(wù)、以及各消息處理任務(wù)對應(yīng)的消息隊列,并為各消息處理任務(wù)準(zhǔn)備必要的資源如定時器資源、靜態(tài)內(nèi)存資源等。其中,本發(fā)明應(yīng)用軟件模塊管理層提供了FID消息處理任務(wù)的任務(wù)入口函數(shù),并根據(jù)應(yīng)用程序的配置文件,在實時操作系統(tǒng)中創(chuàng)建消息處理任務(wù)和/或自處理任務(wù)、以及消息隊列。
其中,所述消息處理任務(wù)負(fù)責(zé)循環(huán)讀取消息隊列中的消息包從而調(diào)用PID中的功能處理函數(shù)。所述一個FID的消息隊列也可以按優(yōu)先級劃分為多個不同優(yōu)先級的消息隊列,高優(yōu)先級消息隊列中的消息包將被優(yōu)先處理,根據(jù)當(dāng)前接收的消息包的優(yōu)先級將其放入不同優(yōu)先級的消息隊列。其中,可以根據(jù)類型為消息包劃分優(yōu)先級,比如將由于定時器超時而發(fā)送的消息包優(yōu)先級最高,應(yīng)被放入優(yōu)先級最高的消息隊列,從而在消息處理任務(wù)處理消息時,該消息包將被優(yōu)先處理。這里,具體消息隊列被劃分為幾個優(yōu)先級,以及何種類型消息包被劃分為何種優(yōu)先級、放入何種優(yōu)先級的消息隊列根據(jù)應(yīng)用程序需求確定,本發(fā)明不進(jìn)行限定。
圖1所示為一個FID內(nèi)部的PID、消息處理任務(wù)、以及消息隊列的邏輯關(guān)系。在圖1中,所述FID對應(yīng)四個PID,分別為PID1、PID2、PID3、PID4;該FID還對應(yīng)一個消息處理任務(wù)和一個自處理任務(wù);該消息處理任務(wù)對應(yīng)的消息隊列被分為三個優(yōu)先級,包括高、中、低優(yōu)先級三個消息隊列。其中,PID1、PID2、PID3和PID4分別對應(yīng)功能函數(shù)MsgFunc 1、MsgFunc2、MsgFunc3和MsgFunc4;在應(yīng)用程序運行時,PID代表各個應(yīng)用軟件模塊,PID之間通過消息包的發(fā)送實現(xiàn)應(yīng)用軟件模塊之間的通訊,從而可以調(diào)用PID的功能函數(shù),實現(xiàn)系統(tǒng)功能。
基于上述建立應(yīng)用軟件模塊與任務(wù)之間關(guān)系的方法,本發(fā)明所述應(yīng)用軟件模塊之間通訊的方法,包括a.源PID通過應(yīng)用軟件模塊管理層申請消息包,源PID填寫并發(fā)送該消息包;b.應(yīng)用軟件模塊管理層將該消息包添加至目的PID所屬FID的消息隊列;c.實時操作系統(tǒng)根據(jù)該FID的優(yōu)先級調(diào)度該FID的消息處理任務(wù);d.該消息處理任務(wù)從自身的消息隊列中讀取步b所述的消息包,通過應(yīng)用軟件模塊管理層調(diào)用目的PID的功能函數(shù)。
下面結(jié)合圖2和圖3,對本發(fā)明應(yīng)用軟件模塊之間通訊的方法加以詳細(xì)說明。圖2所示為消息包發(fā)送處理流程示意圖,具體處理步如下步201~202源PID通過應(yīng)用軟件模塊管理層申請消息包并填寫消息包,該消息包中包含目的PID的ID。
這里,所述申請并填寫消息包的方法為源PID對應(yīng)的應(yīng)用軟件模塊利用本發(fā)明應(yīng)用軟件模塊管理層提供的消息包申請接口向?qū)崟r操作系統(tǒng)申請內(nèi)存,應(yīng)用軟件模塊管理層返回指針指示該消息包在內(nèi)存中的首地址;源PID通過對該指針?biāo)赶虻膬?nèi)存地址進(jìn)行賦值來填寫消息包,填寫的內(nèi)容包括該消息包的消息內(nèi)容、源PID ID、目的PID ID等信息,從而,該應(yīng)用軟件模塊管理層就為該消息包在實時操作系統(tǒng)開辟了一塊內(nèi)存空間用于保存消息包內(nèi)容、源/目的PID ID等信息,并可以通過指針指示該消息包在內(nèi)存中的首地址。
步驟203應(yīng)用軟件模塊管理層的消息包發(fā)送接口根據(jù)所述目的PID的ID將消息包發(fā)送至目的PID所屬的FID,將該消息包放入該FID的消息隊列,結(jié)束當(dāng)前處理。這里,源PID所屬的FID與目的PID所屬的FID可以相同也可以不同。
其中,所述消息包發(fā)送的過程中,傳遞的是消息包在內(nèi)存中的首地址即消息包的指針,在消息隊列中也僅存放消息包的指針,而非真正的消息包。這樣就避免了消息處理任務(wù)在寫消息隊列時的賦值或內(nèi)存拷貝操作,實現(xiàn)系統(tǒng)性能上的騰飛。
以上所述為CPU內(nèi)部應(yīng)用軟件模塊之間的消息包發(fā)送處理,當(dāng)應(yīng)用程序跨CPU進(jìn)行處理時,CPU之間的應(yīng)用軟件模塊也將通過交互消息包進(jìn)行通訊,因此,在填寫消息包時還要進(jìn)一步填寫源CPU ID和目的CPU ID,并在上述步驟203之前進(jìn)一步包括步驟203’應(yīng)用軟件模塊管理層根據(jù)消息包中的源CPU ID和目的CPU ID是否一致判斷源CPU與目的CPU是否相同,如果是,則執(zhí)行步驟203;否則執(zhí)行步驟204。所述源CPU即為源PID所在的CPU;所述目的CPU即為目的PID所在的CPU。
步驟204應(yīng)用軟件模塊管理層通過網(wǎng)絡(luò)發(fā)送該消息包,并通過自身的消息包釋放接口釋放實時操作系統(tǒng)中源CPU所管理的內(nèi)存中的消息包,即釋放該消息包所占用的內(nèi)存空間。
這里,所述消息包的網(wǎng)絡(luò)發(fā)送,傳遞的是完整的消息包,包括消息內(nèi)容、源/目的PID ID和源/目的CPU ID。
其中,本發(fā)明的應(yīng)用軟件模塊管理層為應(yīng)用程序提供了網(wǎng)絡(luò)通訊接口,應(yīng)用程序在開始運行時通過配置文件將各CPU ID及其對應(yīng)的網(wǎng)絡(luò)通訊接口在應(yīng)用軟件模塊管理層中進(jìn)行登記。因此,本步驟中,源CPU所在應(yīng)用軟件模塊管理層可以通過識別目的CPU ID調(diào)用自身與目的CPU進(jìn)行通訊的網(wǎng)絡(luò)接口,將消息包發(fā)送至目的CPU所在的應(yīng)用軟件模塊管理層。這樣,應(yīng)用本發(fā)明方法進(jìn)行應(yīng)用軟件模塊間通訊時,應(yīng)用軟件模塊管理層為應(yīng)用程序提供統(tǒng)一的消息包發(fā)送接口,屏蔽掉CPU之間通訊的復(fù)雜性,應(yīng)用程序不必創(chuàng)建和維護(hù)多個網(wǎng)絡(luò)通訊接口,使應(yīng)用程序的開發(fā)更加易于實現(xiàn)。
這里,所述網(wǎng)絡(luò)通訊模塊可以為基于傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議(TCP/IP)的Socket接口。但關(guān)于具體如何實現(xiàn)所述網(wǎng)絡(luò)通訊接口,不屬本發(fā)明重點,這里不作進(jìn)一步詳述。
步驟205消息包被發(fā)送至目的CPU所在的應(yīng)用軟件模塊管理層,該應(yīng)用軟件模塊管理層通過消息包申請接口向?qū)崟r操作系統(tǒng)申請內(nèi)存,通過指針指示該消息包在當(dāng)前內(nèi)存中的首地址,并根據(jù)接收到的消息包對指針?biāo)赶虻膬?nèi)存地址進(jìn)行賦值來填寫消息包,在內(nèi)存中寫入該消息包的消息內(nèi)容、源/目的PID ID、源/目的CPU ID等信息。然后,根據(jù)所述目的PID ID將消息包發(fā)送至目的PID所屬的FID,將該消息包的指針放入該FID的消息隊列。
根據(jù)圖2所述可見,應(yīng)用本發(fā)明方法能夠?qū)l(fā)送方應(yīng)用軟件模塊即源PID發(fā)送的消息包發(fā)送至接收方應(yīng)用軟件模塊即目的PID所屬FID的消息隊列中,應(yīng)用程序不用關(guān)心軟件模塊之間同步、互斥的問題,僅關(guān)心軟件模塊實現(xiàn)的功能,將目的PID ID包含在消息包中發(fā)送至應(yīng)用軟件模塊管理層提供的統(tǒng)一消息包發(fā)送接口即可,大大簡化應(yīng)用程序的開發(fā)過程。
當(dāng)消息包被發(fā)送至目的PID所屬FID的消息處理隊列之后,該FID的消息處理任務(wù)將對該消息包進(jìn)行處理。圖3所示為本發(fā)明方法消息包處理的一較佳實施例處理流程示意圖,具體處理步驟包括步驟301實時操作系統(tǒng)根據(jù)目的PID所屬FID的優(yōu)先級調(diào)度該FID的消息處理任務(wù)。這里,所述實時操作系統(tǒng)為目的CPU所在的實時操作系統(tǒng),根據(jù)圖2中的描述目的CPU與源CPU可以相同也可以不同。
其中,由于在應(yīng)用程序運行時,應(yīng)用軟件模塊管理層通過配置文件完成了各FID優(yōu)先級的登記,并按FID的優(yōu)先級為各FID創(chuàng)建消息處理任務(wù)。這里,該應(yīng)用軟件模塊管理層提供了任務(wù)接口,通過該任務(wù)接口底層的實時操作系統(tǒng)可以按各FID的優(yōu)先級為其創(chuàng)建消息處理任務(wù),并建立消息處理任務(wù)的任務(wù)調(diào)度隊列。如果應(yīng)用程序還配置了自處理任務(wù)及其優(yōu)先級,則應(yīng)用軟件模塊管理層還將通過所述任務(wù)接口按自處理任務(wù)的優(yōu)先級將其添加至所述任務(wù)調(diào)度隊列中。實時操作系統(tǒng)的CPU將根據(jù)消息處理任務(wù)和/或自處理任務(wù)的優(yōu)先級進(jìn)行任務(wù)調(diào)度。
由于,實時操作系統(tǒng)一般采用優(yōu)先級搶占的調(diào)度策略,在多個任務(wù)就緒的情況下,只有優(yōu)先級最高的任務(wù)獲得CPU運行。因此,在調(diào)度隊列中,當(dāng)多個消息處理任務(wù)和/或自處理任務(wù)就緒時,CPU將調(diào)度優(yōu)先級最高的消息處理任務(wù)或自處理任務(wù)。這里,所謂任務(wù)就緒,就是該任務(wù)除了CPU資源以外,已經(jīng)獲取了所有運行所必須的資源;對于消息處理任務(wù)而言往往是,其所循環(huán)讀取的消息隊列中有消息包等待處理;對于自處理任務(wù)來說就是,根據(jù)應(yīng)用程序自行定義的觸發(fā)機(jī)制,其觸發(fā)條件已經(jīng)滿足,如定時器到時,任務(wù)掛起時間到等。
步驟302步驟301所述FID的消息處理任務(wù)獲得CPU運行之后,該消息處理任務(wù)從自身的消息隊列中讀取消息包,根據(jù)消息包中的目的PID ID調(diào)用目的PID的功能函數(shù),完成當(dāng)前應(yīng)用軟件模塊之間的通訊。
由于,應(yīng)用程序通常需要實現(xiàn)兩個以上模塊之間的通訊,因此在步驟302之后,根據(jù)具體功能函數(shù)的執(zhí)行結(jié)果,所述目的PID還有可能將該消息包進(jìn)行轉(zhuǎn)發(fā),或發(fā)送新的消息包給其它PID。因此,如圖3所示,在步驟302之后,進(jìn)一步包括步驟303應(yīng)用軟件模塊管理層判斷該目的PID是否需要轉(zhuǎn)發(fā)此消息包,如果是,執(zhí)行步驟304;否則執(zhí)行步驟305。
這里,在消息包處理過程中,應(yīng)用軟件模塊管理層還要實時更新各消息包的狀態(tài),所述狀態(tài)可以為申請態(tài)、準(zhǔn)備釋放或發(fā)送等。當(dāng)消息申請后之后,其狀態(tài)為申請態(tài);當(dāng)消息包被放入消息隊列時,其狀態(tài)為發(fā)送;當(dāng)消息包被消息處理任務(wù)讀取進(jìn)行處理時,其狀態(tài)為準(zhǔn)備釋放,如果消息包的處理結(jié)果為需要轉(zhuǎn)發(fā)該消息包,則消息包的狀態(tài)將變?yōu)榘l(fā)送。
其中,應(yīng)用程序通過應(yīng)用軟件模塊管理層提供的消息包發(fā)送接口來發(fā)送該消息包,如果應(yīng)用程序調(diào)用該消息包發(fā)送接口轉(zhuǎn)發(fā)該消息包時,應(yīng)用軟件管理層將修改該消息包的狀態(tài)為“發(fā)送”。因此,本步驟中應(yīng)用軟件模塊管理層可以根據(jù)該消息包的狀態(tài)判斷釋放需要轉(zhuǎn)發(fā)該消息包,即如果消息包狀態(tài)為發(fā)送,則該消息包需要轉(zhuǎn)發(fā)。
步驟304應(yīng)用軟件模塊管理層轉(zhuǎn)發(fā)該消息包,結(jié)束當(dāng)前處理。
這里,所述轉(zhuǎn)發(fā)消息包時,PID再次對指示該消息包內(nèi)存首地址的指針?biāo)赶虻膬?nèi)存地址進(jìn)行賦值,從而根據(jù)當(dāng)前該消息包接收方PID的信息重新填寫源/目的PID ID、源/目的CPU ID等參數(shù),再調(diào)用應(yīng)用軟件模塊管理層的消息包發(fā)送接口來轉(zhuǎn)發(fā)該消息包。然后,執(zhí)行所述步驟203或203’,后續(xù)處理如圖2和圖3所示,不再進(jìn)一步詳述。
步驟305應(yīng)用軟件管理層通過消息包釋放接口釋放該消息包。
其中,消息包的處理結(jié)果分為三類一、當(dāng)前PID準(zhǔn)備發(fā)送新的消息包給其它PID;二、當(dāng)前PID準(zhǔn)備轉(zhuǎn)發(fā)該消息包給其它PID;三、當(dāng)前PID不再發(fā)送消息包給其它PID。在其中的第二種情況下,該消息包不必釋放,在其它兩種情況下,由于應(yīng)用程序暫時不再使用此消息包,則需要將其釋放。但是在釋放消息包之后,對于第一種情況來說,PID需要重新申請并填寫消息包,即重新執(zhí)行圖2和圖3所示的處理,從而完成與另一應(yīng)用軟件模塊的通訊;對于第三種請求來說,PID停止發(fā)送消息包,因此該PID不再做任何有關(guān)應(yīng)用軟件模塊間通訊的操作。
本發(fā)明中,消息處理任務(wù)在處理消息包時加入信號量進(jìn)行保護(hù),使得一個消息的處理過程不會被另外一個消息處理任務(wù)搶占,從而可以解決應(yīng)用層不同軟件模塊之間同步、互斥等問題。其中,所述信號量實現(xiàn)不同軟件模塊之間同步/互斥,具體原理為將信號量作為任務(wù)等待的一個狀態(tài)/事件,初始信號量是不可用的,任務(wù)或中斷處理程序通過釋放該信號量來通知這個狀態(tài)/事件的發(fā)生,其它任務(wù)由于等待該信號量而阻塞,直到該信號量的釋放。也就是說消息處理任務(wù)在對一個消息包進(jìn)行處理時,該消息包占用的資源由于存在信號量的保護(hù),不會被其它任務(wù)占用,直到消息處理任務(wù)完成對該消息包的處理才會將信號量釋放,從而其它任務(wù)可以對該消息包所占用的資源進(jìn)行處理。這里,關(guān)于具體如何實現(xiàn)信號量機(jī)制屬公知技術(shù),本文不作進(jìn)一步詳述。
綜上所述,應(yīng)用本發(fā)明建立應(yīng)用軟件模塊與任務(wù)之間關(guān)系的方法,將整個應(yīng)用程序按功能劃分為FID和PID,并將FID和PID的從屬關(guān)系以及FID和/自處理任務(wù)的優(yōu)先級在系統(tǒng)初始化時登記在應(yīng)用軟件模塊管理層中,應(yīng)用軟件模塊管理層通過自身的任務(wù)接口為各FID在底層實時操作系統(tǒng)中創(chuàng)建消息處理任務(wù)和消息隊列,并建立消息處理任務(wù)和/或自處理任務(wù)的任務(wù)調(diào)度隊列。在此基礎(chǔ)之上,采用本發(fā)明的應(yīng)用軟件模塊之間通訊的方法,能夠?qū)崿F(xiàn)應(yīng)用軟件模塊之間通過消息包的發(fā)送完成功能函數(shù)的調(diào)用,從而完成應(yīng)用軟件模塊之間的通訊。在發(fā)送消息包時,應(yīng)用程序不必關(guān)心各軟件模塊之間同步互斥的問題,發(fā)送方應(yīng)用軟件模塊僅需要填寫接收方應(yīng)用軟件模塊對應(yīng)的CPU ID和PID ID即可;在進(jìn)行消息包處理時,消息處理任務(wù)按優(yōu)先級獲得CPU的運行,通過讀取消息隊列中的消息包調(diào)用接收方應(yīng)用軟件模塊的功能函數(shù),并且為每一次消息包處理提供了信號量保護(hù),保證消息處理的同步和互斥。
可見,本發(fā)明方法為多任務(wù)應(yīng)用軟件系統(tǒng)提供了應(yīng)用軟件模塊管理層,該應(yīng)用軟件模塊管理層為應(yīng)用程序屏蔽了任務(wù)、消息隊列、信號量、共享內(nèi)存等操作系統(tǒng)的基本概念,應(yīng)用程序不需要創(chuàng)建和管理這些相互關(guān)聯(lián)的操作系統(tǒng)對象,只需要關(guān)心業(yè)務(wù)的處理和系統(tǒng)實現(xiàn)的功能,不僅使應(yīng)用程序開發(fā)時軟件模塊劃分等需求分析過程大大簡化,并且使各應(yīng)用軟件模塊的開發(fā)基于功能處理,從而易于實現(xiàn)并保證多任務(wù)應(yīng)用軟件系統(tǒng)的穩(wěn)定性。
總之,以上所述僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種實時操作系統(tǒng)環(huán)境下多任務(wù)應(yīng)用軟件模塊的管理方法,其特征在于,在多任務(wù)應(yīng)用程序與實時操作系統(tǒng)之間設(shè)置應(yīng)用軟件模塊管理層,該方法還包括建立應(yīng)用軟件模塊與任務(wù)之間關(guān)系的方法和應(yīng)用軟件模塊之間通訊的方法;所述建立應(yīng)用軟件模塊與任務(wù)之間關(guān)系的方法,包括將整個應(yīng)用程序劃分為一個或一個以上功能標(biāo)識FID,為各FID配置優(yōu)先級;將每個FID劃分為一個或一個以上處理標(biāo)識PID;應(yīng)用軟件模塊管理層為每個FID登記優(yōu)先級、創(chuàng)建消息處理任務(wù)和消息隊列,為每個PID登記功能處理函數(shù);所述應(yīng)用軟件模塊之間通訊的方法,包括a.源PID通過應(yīng)用軟件模塊管理層申請消息包,源PID填寫并發(fā)送該消息包;b.應(yīng)用軟件模塊管理層將該消息包添加至目的PID所屬FID的消息隊列;c.實時操作系統(tǒng)根據(jù)FID的優(yōu)先級調(diào)度該目的PID所屬FID的消息處理任務(wù);d.該消息處理任務(wù)從自身的消息隊列中讀取步驟b所述的消息包,通過應(yīng)用軟件模塊管理層調(diào)用目的PID的功能函數(shù)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,建立應(yīng)用軟件模塊與任務(wù)之間關(guān)系的方法中,所述劃分FID的方法為根據(jù)應(yīng)用程序?qū)崿F(xiàn)的基本功能以及各基本功能的優(yōu)先級劃分。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,建立應(yīng)用軟件模塊與任務(wù)之間關(guān)系的方法中,所述劃分PID的方法為根據(jù)各FID內(nèi)部實現(xiàn)的具體功能劃分。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,建立應(yīng)用軟件模塊與任務(wù)之間關(guān)系的方法中,所述應(yīng)用軟件模塊管理層還進(jìn)一步為FID登記一個或一個以上自處理任務(wù)及其優(yōu)先級。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,建立應(yīng)用軟件模塊與任務(wù)之間關(guān)系的方法中,所述FID的消息隊列按優(yōu)先級劃分為一個以上的消息隊列。
6.根據(jù)權(quán)利要求1或4所述的方法,其特征在于,建立應(yīng)用軟件模塊與任務(wù)之間關(guān)系的方法中,所述應(yīng)用軟件模塊管理層通過運行應(yīng)用程序提供的配置文件完成FID和PID的登記。
7.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟b中,應(yīng)用軟件模塊管理層根據(jù)消息包中的目的PID ID將該消息包添加至目的PID所屬FID的消息隊列。
8.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟c中,實時操作系統(tǒng)調(diào)度消息處理任務(wù)的方法為實時操作系統(tǒng)通過應(yīng)用軟件模塊管理層提供的任務(wù)接口按應(yīng)用軟件模塊管理層登記的消息處理任務(wù)優(yōu)先級進(jìn)行調(diào)度。
9.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟d中,所述消息處理任務(wù)讀取消息包時,應(yīng)用軟件模塊管理層為該消息處理任務(wù)加入信號量保護(hù)。
10.根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述步驟d之后,該方法進(jìn)一步包括應(yīng)用軟件模塊管理層判斷目的PID是否轉(zhuǎn)發(fā)該消息包,如果是,轉(zhuǎn)發(fā)該消息包;否則釋放該消息包。
11.根據(jù)權(quán)利要求10所述的方法,其特征在于,所述判斷是否轉(zhuǎn)發(fā)消息包的方法為通過識別該消息包的狀態(tài)進(jìn)行判斷。
12.根據(jù)權(quán)利要求10所述的方法,其特征在于,所述目的PID轉(zhuǎn)發(fā)消息包時,該目的PID根據(jù)當(dāng)前接收方PID的ID對該消息包的目的PID ID進(jìn)行修改,并再次發(fā)送此消息包;所述轉(zhuǎn)發(fā)消息包為執(zhí)行步驟b。
13.根據(jù)權(quán)利要求1或12所述的方法,其特征在于,源PID對應(yīng)的CPU與目的PID對應(yīng)的CPU不相同時,將源PID對應(yīng)的CPU作為源CPU,目的PID對應(yīng)的CPU作為目的CPU,在執(zhí)行所述步驟b之前,該方法進(jìn)一步包括源CPU對應(yīng)的應(yīng)用軟件模塊管理層通過網(wǎng)絡(luò)發(fā)送消息包至目的CPU對應(yīng)的應(yīng)用軟件模塊管理層,收到消息包的應(yīng)用軟件模塊管理層中請并填寫消息包;則步驟b至步驟d所述應(yīng)用軟件模塊管理層為目的CPU對應(yīng)的應(yīng)用軟件模塊管理層。
14.根據(jù)權(quán)利要求13所述的方法,其特征在于,根據(jù)當(dāng)前要發(fā)送消息包中源CPU ID和目的CPU ID確定源PID對應(yīng)的CPU與目的PID對應(yīng)的CPU是否相同。
15.根據(jù)權(quán)利要求13所述的方法,其特征在于,所述通過網(wǎng)絡(luò)發(fā)送該消息包的方法為應(yīng)用軟件模塊管理層通過自身為應(yīng)用程序提供的目的CPU對應(yīng)的網(wǎng)絡(luò)通訊接口進(jìn)行發(fā)送。
16.根據(jù)權(quán)利要求13所述的方法,其特征在于,所述通過網(wǎng)絡(luò)發(fā)送消息包的同時,源CPU對應(yīng)的應(yīng)用軟件模塊管理層釋放該消息包。
17.根據(jù)權(quán)利要求13所述的方法,其特征在于,所述應(yīng)用軟件模塊管理層申請消息包之后,進(jìn)一步保存用于指示該消息包在實時操作系統(tǒng)中內(nèi)存首地址的指針;步驟b中,所述應(yīng)用軟件模塊管理層將消息包添加至消息隊列的處理中,所添加的是消息包的指針;步驟d中,所述讀取消息包的處理中,消息處理任務(wù)通過識別消息隊列中該消息包的指針讀取該消息包。
全文摘要
本發(fā)明公開了一種實時操作系統(tǒng)環(huán)境下多任務(wù)應(yīng)用軟件模塊的管理方法,在多任務(wù)應(yīng)用程序與實時操作系統(tǒng)之間增加應(yīng)用軟件模塊管理層,該方法還包括將應(yīng)用程序劃分為一個或多個FID;將各FID劃分為一個或多個PID;應(yīng)用軟件模塊管理層登記FID優(yōu)先級、創(chuàng)建消息處理任務(wù)和消息隊列,登記PID功能處理函數(shù);還包括a.源PID申請、填寫消息包并發(fā)送;b.應(yīng)用軟件模塊管理層將該消息包添加至目的PID所屬FID的消息隊列;c.實時操作系統(tǒng)根據(jù)該FID的優(yōu)先級調(diào)度消息處理任務(wù);d.該消息處理任務(wù)從消息隊列中讀取消息包,調(diào)用目的PID的功能函數(shù)。采用本發(fā)明方法為多任務(wù)應(yīng)用程序屏蔽軟件模塊間同步/互斥等問題,簡化開發(fā)過程。
文檔編號G06F9/54GK1744046SQ20041007412
公開日2006年3月8日 申請日期2004年8月31日 優(yōu)先權(quán)日2004年8月31日
發(fā)明者李隆 申請人:華為技術(shù)有限公司