專(zhuān)利名稱(chēng):提高嵌入式軟件代碼共享程度的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及嵌入式系統(tǒng),具體涉及提高嵌入式軟件代碼共享程度的方法。
背景技術(shù):
通信領(lǐng)域的嵌入式軟件是為實(shí)現(xiàn)某種特定用途而設(shè)計(jì)的,建立在通用處理器和嵌入式操作系統(tǒng)之上。在通信領(lǐng)域日新月異的今天,嵌入式軟件通常由多個(gè)模塊和多個(gè)線程組成。目前,嵌入式軟件的主流設(shè)計(jì)方法主要有幾下幾種:(I)軟件模塊直接使用操作系統(tǒng)提供的接口與特定的嵌入式操作系統(tǒng)深度綁定。(2)使用封裝技術(shù)將需要使用的操作系統(tǒng)接口封裝起來(lái),用以支持多操作系統(tǒng),軟件模塊使用封裝之后的函數(shù)接口。上述兩種方法中,軟件模塊之間的相互通信需要定義多個(gè)全部變量用于軟件模塊之間的兩兩通信,并且使用操作系統(tǒng)提供的消息接口進(jìn)行處理,軟件模塊的初始化和創(chuàng)建線程等接口直接掛接在用戶主入口函數(shù)里面。然而,上述兩種方法分別存在各自的缺點(diǎn):第(I)種方法的缺點(diǎn)是軟件代碼不支持多操作系統(tǒng),并且軟件模塊之間的通信結(jié)構(gòu)復(fù)雜,軟件模塊無(wú)法獨(dú)立出來(lái),代碼共享程度低。第(2)種方法雖然解決代碼不支持多操作系統(tǒng)的問(wèn)題,但是沒(méi)有解決模塊之間的通信結(jié)構(gòu)復(fù)雜、模塊無(wú)法獨(dú)立出來(lái)、代碼共享程度低的問(wèn)題。由此可見(jiàn),現(xiàn)有的嵌入式軟件普遍存在模塊之間的通信結(jié)構(gòu)復(fù)雜,模塊無(wú)法獨(dú)立出來(lái),代碼共享程度低的問(wèn)題。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題是解決嵌入式軟件存在模塊之間的通信結(jié)構(gòu)復(fù)雜,模塊無(wú)法獨(dú)立出來(lái),代碼共享程度低的問(wèn)題。為了解決上述技術(shù)問(wèn)題,本發(fā)明所采用的技術(shù)方案是提供一種提高嵌入式軟件代碼共享程度的方法,包括以下步驟:使用源文件和頭文件兩種組織形式進(jìn)行靜態(tài)配置,在軟件模塊和操作系統(tǒng)之間形成中間層,采用宏描述的方式在源文件中定義頂層初始化登記表、模塊登記表和模塊族登記表的全局變量數(shù)組,在頭文件中描述相關(guān)的全局變量成員;根據(jù)頂層初始化登記表的內(nèi)容完成系統(tǒng)的頂層初始化;根據(jù)模塊族登記表創(chuàng)建多個(gè)軟件模塊共享的公共消息處理任務(wù),根據(jù)模塊登記表創(chuàng)建非模塊族的相應(yīng)自消息處理任務(wù),完成調(diào)度初始化,根據(jù)各軟件模塊的初始化周期和初始化步驟依次發(fā)送相關(guān)的調(diào)度指令;各軟件模塊向中間層提供頂層初始化、調(diào)度初始化和消息處理函數(shù),并通過(guò)中間層實(shí)現(xiàn)各軟件模塊之間的通信,從而完成軟件模塊的初始化和相應(yīng)的消息處理。在上述方法中,頂層初始化包括以下步驟:步驟201:獲取頂層初始化登記表的基地址和元素個(gè)數(shù);
步驟202:獲取頂層初始化登記表中的第一個(gè)元素;步驟203:調(diào)用該元素的初始化接口進(jìn)行初始化;步驟204:判斷本次初始化是否成功,如果初始化失敗,則返回頂層初始化錯(cuò)誤,結(jié)束頂層初始化;否則,轉(zhuǎn)步驟205 ;步驟205:獲取頂層初始化登記表中的下一個(gè)元素,如果上一個(gè)元素已經(jīng)是頂層初始化登記表中的最后一個(gè)元素,則轉(zhuǎn)步驟206 ;否則,轉(zhuǎn)步驟203 ;步驟206:啟動(dòng)調(diào)度初始化接口,如果調(diào)度初始化接口啟動(dòng)失敗,則返回調(diào)度初始化錯(cuò)誤,結(jié)束頂層初始化;否則返回頂層初始化成功,結(jié)束頂層初始化。在上述方法中,調(diào)度初始化包括以下步驟:步驟301:定義軟件模塊描述和任務(wù)描述的全局變量數(shù)據(jù),根據(jù)模塊族登記表創(chuàng)建公共消息處理任務(wù),并初始化軟件模塊描述和任務(wù)描述的相關(guān)數(shù)據(jù);定義模塊登記表中局部變量的元素個(gè)數(shù),并分別設(shè)置相應(yīng)局部變量的數(shù)值;步驟302:獲取模塊登記表中第一個(gè)軟件模塊的登記信息及描述信息;步驟303:判斷該軟件模塊是否為模塊族登記表中的模塊,若是,則創(chuàng)建公共消息處理任務(wù),并初始化全局變量的描述信息,轉(zhuǎn)步驟304 ;否則,創(chuàng)建自消息處理任務(wù),并初始化局部變量的描述信息,轉(zhuǎn)步驟304 ;步驟304:判斷該軟件模塊是否為模塊族登記表中的最后一個(gè),如果不是,則轉(zhuǎn)步驟305,否則,轉(zhuǎn)步驟306 ;步驟305:獲取模塊族登記表中下一個(gè)軟件模塊的模塊登記信息及描述信息,轉(zhuǎn)步驟303 ;步驟306:定義全局變量初始化周期,并設(shè)置為I ;定義軟件模塊的初始化步驟,并設(shè)置為I ;步驟307:獲取模塊登記表中的第一個(gè)軟件模塊;步驟308:向該軟件模塊發(fā)送模塊初始化任務(wù)消息,并等待初始化返回結(jié)果;步驟309:判斷初始化返回結(jié)果,如果初始化失敗,則登記系統(tǒng)錯(cuò)誤信息并返回初始化失敗,調(diào)度初始化結(jié)束;否則轉(zhuǎn)步驟310 ;步驟310:判斷模塊初始化步驟是否小于最大初始化步驟,如果是則轉(zhuǎn)到步驟311,否則轉(zhuǎn)到步驟312 ;步驟311:軟件模塊初始化步驟加I,轉(zhuǎn)步驟308 ;步驟312:判斷當(dāng)前的全局變量初始化周期是否小于全局變量最大初始化周期,如果是則轉(zhuǎn)步驟313 ;否則,調(diào)度初始化結(jié)束;步驟313:判斷當(dāng)前初始化周期是否還有軟件模塊需要進(jìn)行初始化,是則全局變量初始化周期加1,轉(zhuǎn)步驟314,否則轉(zhuǎn)步驟315 ;步驟314:判斷該軟件模塊是否為模塊登記表中的最后一個(gè),如果不是,則轉(zhuǎn)步驟315,否則,調(diào)度初始化結(jié)束,啟動(dòng)模塊公共消息處理任務(wù)和自消息處理任務(wù);步驟315:獲取模塊登記表中下一個(gè)軟件模塊的模塊,轉(zhuǎn)步驟308。在上述方法中,模塊公共消息處理任務(wù)的流程包括以下步驟:步驟401:定義軟件模塊描述和任務(wù)描述的局部變量,并根據(jù)當(dāng)前運(yùn)行參數(shù)初始化該局部變量;
步驟402:等待模塊初始化事件或任務(wù)運(yùn)行事件,若為模塊初始化事件,則轉(zhuǎn)步驟403,若為任務(wù)運(yùn)行事件,則轉(zhuǎn)到驟404,其他事件繼續(xù)本步驟;步驟403:若在當(dāng)前初始化周期內(nèi)模塊初始化接口函數(shù)不存在,則轉(zhuǎn)步驟402,否則轉(zhuǎn)步驟405 ;步驟404:等待模塊初始化事件或消息隊(duì)列非空事件,若所述非空事件,則轉(zhuǎn)到步驟406,其他繼續(xù)本步驟;步驟405:調(diào)用模塊初始化函數(shù)執(zhí)行當(dāng)前初始化步驟的初始化,向調(diào)度初始化模塊發(fā)送初始化結(jié)果事件,轉(zhuǎn)步驟402 ;步驟406:依次輪詢(xún)?nèi)蝿?wù)描述里面的各個(gè)模塊,讀取消息并調(diào)用消息處理函數(shù)進(jìn)行處理,處理完成后調(diào)度釋放消息,所有消息處理完成后轉(zhuǎn)步驟404。在上述方法中,模塊自消息處理任務(wù)的流程包括以下步驟:步驟501:定義軟件模塊描述和任務(wù)描述的局部變量,并根據(jù)當(dāng)前運(yùn)行參數(shù)初始化該變量;步驟502:判斷模塊初始化步驟是否完成,若初始化沒(méi)有完成,則轉(zhuǎn)步驟503,否則轉(zhuǎn)到步驟504 ;步驟503:等待任務(wù)運(yùn)行事件,若等到任務(wù)運(yùn)行事件,則轉(zhuǎn)到步驟504,否則繼續(xù)本步驟;步驟504:調(diào)用模塊自消息處理任務(wù)函數(shù)完成模塊的指定功能;步驟505:刪除模塊自消息處理任務(wù)。本發(fā)明,在軟件模塊和操作系統(tǒng)適配層之間提供一個(gè)模塊管理與調(diào)度的中間層,將各個(gè)模塊之間通信和模塊調(diào)度接管過(guò)來(lái),降低模塊之間的耦合,可以非常方便的將模塊做成組件獨(dú)立出來(lái),以供其他產(chǎn)品使用,提高代碼的共享程度。
圖1是本發(fā)明提供的方法流程圖;圖2是本發(fā)明的頂層初始化流程圖;圖3是本發(fā)明的調(diào)度初始化流程圖;圖4是本發(fā)明的模塊公共消息處理任務(wù)流程圖;圖5是本發(fā)明的模塊自消息處理任務(wù)流程圖;圖6是本發(fā)明的模塊的消息使用流程;圖7是本發(fā)明的消息管理的狀態(tài)機(jī)。
具體實(shí)施例方式本發(fā)明的目的在于提供一種提高嵌入式軟件代碼共享程度的方法,采用積木式模塊化設(shè)計(jì)方式,在軟件模塊和操作系統(tǒng)適配層之間提供一個(gè)模塊管理與調(diào)度的中間層,使軟件模塊接口統(tǒng)一,軟件模塊之間依賴(lài)程度低,這樣在新產(chǎn)品的開(kāi)發(fā)上可以非常容易使用其他產(chǎn)品開(kāi)發(fā)的軟件模塊,提高了軟件模塊代碼的共享程度。為了更好的說(shuō)明本發(fā)明,下面將結(jié)合具體實(shí)施例和說(shuō)明書(shū)附圖進(jìn)行詳細(xì)的闡述。如圖1所示,本發(fā)明提供的提高嵌入式軟件代碼共享程度的方法,包括以下步驟:
步驟101、靜態(tài)配置。靜態(tài)配置主要負(fù)責(zé)完成頂層初始化登記表、模塊登記表和模塊族登記表的管理,使用源文件和頭文件兩種組織形式,源文件用于定義頂層初始化登記表、模塊登記表和模塊族登記表的全局變量以及相關(guān)的宏描述形式,在源文件(源代碼文件)中采用宏描述的方式定義頂層初始化登記表、模塊登記表、模塊族登記表的全局變量數(shù)組,使源代碼在編譯的時(shí)候自動(dòng)生成相關(guān)登記表的內(nèi)容,頭文件用于登記相關(guān)全局變量的成員,在頭文件中完成相關(guān)的全局變量成員的宏描述定義,新增全局變量成員的時(shí)候只需要修改頭文件即可。步驟102、頂層初始化。頂層初始化是指在程序入口和模塊初始化之間進(jìn)行的初始化,根據(jù)頂層初始化登記表的內(nèi)容完成,在所有模塊初始化之前進(jìn)行,實(shí)現(xiàn)系統(tǒng)全局相關(guān)的初始化。具體作法是:創(chuàng)建一個(gè)根任務(wù),根據(jù)頂層初始化登記表的內(nèi)容依次完成頂層初始化過(guò)程,在完成所有的頂層初始化之后,調(diào)用調(diào)度初始化入口啟動(dòng)調(diào)度初始化。步驟103、調(diào)度初始化。調(diào)度初始化負(fù)責(zé)創(chuàng)建模塊公共消息處理任務(wù)和自消息處理任務(wù)并使其在模塊初始化完成之后才運(yùn)行。首先根據(jù)模塊族登記表的內(nèi)容創(chuàng)建多個(gè)模塊共享的公共消息處理任務(wù),然后根據(jù)模塊登記表的內(nèi)容創(chuàng)建非模塊族的模塊的自消息處理任務(wù)。根據(jù)模塊的初始化周期和初始化步驟依次向模塊發(fā)送公共消息處理任務(wù)和自消息處理任務(wù)指令。步驟104、完成模塊的初始化和消息處理,軟件模塊只需要向該中間層提供頂層初始化、調(diào)度初始化和消息處理函數(shù),軟件模塊之間的通信通過(guò)該中間層來(lái)實(shí)現(xiàn),軟件模塊的初始化分成多個(gè)初始化周期,每個(gè)初始化周期分成多個(gè)初始化步驟,模塊的初始化和消息處理包括以下幾個(gè)方面:( I)模塊公共消息處理任務(wù)。模塊公共消息處理任務(wù)負(fù)責(zé)完成模塊的初始化和消息處理,為所有的模塊提供統(tǒng)一的消息處理,按照初始化的目的不同,可以將模塊的初始化分布在不同的階段完成,該任務(wù)讀取模塊的消息隊(duì)列里面的消息,調(diào)用模塊登記表里面對(duì)應(yīng)的消息處理函數(shù)進(jìn)行處理,處理之后統(tǒng)一釋放任務(wù)。( 2 )、模塊自消息處理任務(wù)。模塊自消息處理任務(wù)負(fù)責(zé)完成消息處理之外的為需要完成某種特定功能而窗口的任務(wù)。(3)、消息管理。消息管理負(fù)責(zé)完成消息隊(duì)列的管理、消息的分配和釋放、消息的入隊(duì)和出對(duì)以及相關(guān)消息狀態(tài)的處理。頂層初始化的流程如圖2所示,包括以下步驟:步驟201:獲取頂層初始化登記表的基地址和元素個(gè)數(shù);步驟202:獲取頂層初始化登記表中的第一個(gè)元素;步驟203:調(diào)用該元素的初始化接口進(jìn)行初始化;步驟204:判斷本次初始化是否成功,如果初始化失敗,則返回頂層初始化錯(cuò)誤,結(jié)束頂層初始化;否則,轉(zhuǎn)步驟205 ;步驟205:獲取頂層初始化登記表中的下一個(gè)元素,如果上一個(gè)元素已經(jīng)是頂層初始化登記表中的最后一個(gè)元素,則轉(zhuǎn)步驟206 ;否則,轉(zhuǎn)步驟203 ;步驟206:啟動(dòng)調(diào)度初始化接口,如果調(diào)度初始化接口啟動(dòng)失敗,則返回調(diào)度初始化錯(cuò)誤,結(jié)束頂層初始化;否則返回頂層初始化成功,結(jié)束頂層初始化。調(diào)度初始化的流程如圖3所示,包括以下步驟:步驟301:定義軟件模塊描述和任務(wù)描述的全局變量數(shù)據(jù),根據(jù)模塊族登記表創(chuàng)建公共消息處理任務(wù),并初始化軟件模塊描述和任務(wù)描述的相關(guān)數(shù)據(jù);定義模塊登記表中局部變量的元素個(gè)數(shù),并分別設(shè)置相應(yīng)局部變量的數(shù)值;步驟302:獲取模塊登記表中第一個(gè)軟件模塊的登記信息及描述信息;步驟303:判斷該軟件模塊是否為模塊族登記表中的模塊,若是,則創(chuàng)建公共消息處理任務(wù),并初始化全局變量的描述信息,轉(zhuǎn)步驟304 ;否則,創(chuàng)建自消息處理任務(wù),并初始化局部變量的描述信息,轉(zhuǎn)步驟304 ;步驟304:判斷該軟件模塊是否為模塊族登記表中的最后一個(gè),如果不是,則轉(zhuǎn)步驟305,否則,轉(zhuǎn)步驟306 ;步驟305:獲取模塊族登記表中下一個(gè)軟件模塊的模塊登記信息及描述信息,轉(zhuǎn)步驟303 ;步驟306:定義全局變量初始化周期,并設(shè)置為I ;定義軟件模塊的初始化步驟,并設(shè)置為I ;步驟307:獲取模塊登記表中的第一個(gè)軟件模塊;步驟308:向該軟件模塊發(fā)送模塊初始化任務(wù)消息,并等待初始化返回結(jié)果;步驟309:判斷初始化返回結(jié)果,如果初始化失敗,則登記系統(tǒng)錯(cuò)誤信息并返回初始化失敗,調(diào)度初始化結(jié)束;否則轉(zhuǎn)步驟310 ;步驟310:判斷模塊初始化步驟是否小于最大初始化步驟,如果是則轉(zhuǎn)到步驟311,否則轉(zhuǎn)到步驟312 ; 步驟311:軟件模塊初始化步驟加I,轉(zhuǎn)步驟308 ;步驟312:判斷當(dāng)前的全局變量初始化周期是否小于全局變量最大初始化周期,如果是則轉(zhuǎn)步驟313 ;否則,調(diào)度初始化結(jié)束;步驟313:判斷當(dāng)前初始化周期是否還有軟件模塊需要進(jìn)行初始化,是則全局變量初始化周期加1,轉(zhuǎn)步驟314,否則轉(zhuǎn)步驟315 ;步驟314:判斷該軟件模塊是否為模塊登記表中的最后一個(gè),如果不是,則轉(zhuǎn)步驟315,否則,處理完該軟件模塊后,結(jié)束調(diào)度初始化,啟動(dòng)模塊公共消息處理任務(wù)和自消息處理任務(wù);步驟315:獲取模塊登記表中下一個(gè)軟件模塊的模塊,轉(zhuǎn)步驟308。軟件模塊的公共消息處理任務(wù)流程如圖4所示,包括以下步驟:步驟401:定義軟件模塊描述和任務(wù)描述的局部變量,并根據(jù)當(dāng)前運(yùn)行參數(shù)初始化該局部變量;步驟402:等待模塊初始化事件或任務(wù)運(yùn)行事件,若為模塊初始化事件,則轉(zhuǎn)步驟403,若為任務(wù)運(yùn)行事件,則轉(zhuǎn)到步驟404,其他事件繼續(xù)本步驟;步驟403:若在當(dāng)前初始化周期內(nèi)模塊初始化接口函數(shù)不存在,則轉(zhuǎn)步驟402,否則轉(zhuǎn)到步驟405 ;
步驟404:等待模塊初始化事件或消息隊(duì)列非空事件,若所述非空事件,則轉(zhuǎn)到步驟406,其他繼續(xù)本步驟;步驟405:調(diào)用模塊初始化函數(shù)執(zhí)行當(dāng)前初始化步驟的初始化,向調(diào)度初始化模塊發(fā)送初始化結(jié)果事件,轉(zhuǎn)到步驟402 ;步驟406:依次輪詢(xún)?nèi)蝿?wù)描述里面的各個(gè)軟件模塊,讀取相應(yīng)的消息處理函數(shù)進(jìn)行處理,處理完成后調(diào)度釋放消息,所有消息處理完成后轉(zhuǎn)步驟404。模塊自消息處理任務(wù)的流程如圖5所示,包括以下步驟:步驟501:定義軟件模塊描述和任務(wù)描述的局部變量,并根據(jù)當(dāng)前運(yùn)行參數(shù)初始化該變量;步驟502:判斷模塊初始化步驟是否完成,若初始化沒(méi)有完成,則轉(zhuǎn)步驟503,否則轉(zhuǎn)到步驟504 ;步驟503:等待任務(wù)運(yùn)行事件,若等到任務(wù)運(yùn)行事件,則轉(zhuǎn)到步驟504,否則繼續(xù)本步驟;步驟504:調(diào)用模塊自消息處理任務(wù)函數(shù)完成模塊的指定功能,自消息處理任務(wù)一般情況下為循環(huán)體;步驟505:刪除系統(tǒng)創(chuàng)建的模塊自消息處理任務(wù)。消息管理的流程如圖6所示,包括以下步驟:。步驟601:申請(qǐng)消息,填寫(xiě)消息內(nèi)容;步驟602:調(diào)用消息發(fā)送接口將消息發(fā)送到目的模塊的消息隊(duì)列,同時(shí)向消息處理任務(wù)發(fā)送消息隊(duì)列非空事件并激活消息處理任務(wù);步驟603:判斷發(fā)送是否成功,如果成功,則結(jié)束流程,否則轉(zhuǎn)步驟604 ;步驟604:則釋放消息,并結(jié)束流程。如圖7所示,消息隊(duì)列的創(chuàng)建過(guò)程描述如下:(I)建立消息隊(duì)列管理全局變量;(2)分配一個(gè)空閑的消息隊(duì)列,并將其狀態(tài)設(shè)置為忙,初始化該消息隊(duì)列。消息的管理描述如下:(I)申請(qǐng)消息,將消息從空閑遷移到分配;(2)釋放消息,將消息從分配遷移到空閑;(3)發(fā)送消息,將消息從分配遷移到入隊(duì)列,并且隊(duì)列所屬任務(wù)發(fā)送隊(duì)列非空事件;(4)獲取消息,將消息從入隊(duì)列遷移到出隊(duì)列,有消息處理任務(wù)調(diào)用消息處理函數(shù)來(lái)處理該消息;(5)調(diào)度釋放,將消息從出隊(duì)列遷移到空閑,該消息有處理任務(wù)統(tǒng)一進(jìn)行釋放;(6)消息轉(zhuǎn)發(fā),將消息從出隊(duì)列遷移到入隊(duì)列;(7)禁止調(diào)度釋放,將消息從出隊(duì)列遷移到分配。本發(fā)明不局限于上述最佳實(shí)施方式,任何人應(yīng)該得知在本發(fā)明的啟示下作出的結(jié)構(gòu)變化,凡是與本發(fā)明具有相同或相近的技術(shù)方案,均落入本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.提高嵌入式軟件代碼共享程度的方法,其特征在于,包括以下步驟: 使用源文件和頭文件兩種組織形式進(jìn)行靜態(tài)配置,在軟件模塊和操作系統(tǒng)之間形成中間層,采用宏描述的方式在源文件中定義頂層初始化登記表、模塊登記表和模塊族登記表的全局變量數(shù)組,在頭文件中描述相關(guān)的全局變量成員; 根據(jù)頂層初始化登記表的內(nèi)容完成系統(tǒng)的頂層初始化; 根據(jù)模塊族登記表創(chuàng)建多個(gè)軟件模塊共享的公共消息處理任務(wù),根據(jù)模塊登記表創(chuàng)建非模塊族的相應(yīng)自消息處理任務(wù),完成調(diào)度初始化,根據(jù)各軟件模塊的初始化周期和初始化步驟依次發(fā)送相關(guān)的調(diào)度指令; 各軟件模塊向中間層提供頂層初始化、調(diào)度初始化和消息處理函數(shù),并通過(guò)中間層實(shí)現(xiàn)各軟件模塊之間的通信,從而完成軟件模塊的初始化和相應(yīng)的消息處理。
2.如權(quán)利要求1所述的提高嵌入式軟件代碼共享程度的方法,其特征在于,頂層初始化包括以下步驟: 步驟201:獲取頂層初始化登記表的基地址和元素個(gè)數(shù); 步驟202:獲取頂層初始化登記表中的第一個(gè)元素; 步驟203:調(diào)用該元素的初始化接口進(jìn)行初始化; 步驟204:判斷本次初始化是否成功,如果初始化失敗,則返回頂層初始化錯(cuò)誤,結(jié)束頂層初始化;否則,轉(zhuǎn)步驟205; 步驟205:獲取頂層初始化登記表中的下一個(gè)元素,如果上一個(gè)元素已經(jīng)是頂層初始化登記表中的最后一個(gè)元素,則轉(zhuǎn)步驟206 ;否則,轉(zhuǎn)步驟203 ; 步驟206:啟動(dòng)調(diào)度初始化接口,如果調(diào)度初始化接口啟動(dòng)失敗,則返回調(diào)度初始化錯(cuò)誤,結(jié)束頂層初始化;否則返回頂層初始化成功,結(jié)束頂層初始化。
3.如權(quán)利要求1所述的提高嵌入式軟件代碼共享程度的方法,其特征在于,調(diào)度初始化包括以下步驟: 步驟301:定義軟件模塊描述和任務(wù)描述的全局變量數(shù)據(jù),根據(jù)模塊族登記表創(chuàng)建公共消息處理任務(wù),并初始化軟件模塊描述和任務(wù)描述的相關(guān)數(shù)據(jù);定義模塊登記表中局部變量的元素個(gè)數(shù),并分別設(shè)置相應(yīng)局部變量的數(shù)值; 步驟302:獲取模塊登記表中第一個(gè)軟件模塊的登記信息及描述信息; 步驟303:判斷該軟件模塊是否為模塊族登記表中的模塊,若是,則創(chuàng)建公共消息處理任務(wù),并初始化全局變量的描述信息,轉(zhuǎn)步驟304 ;否則,創(chuàng)建自消息處理任務(wù),并初始化局部變量的描述信息,轉(zhuǎn)步驟304 ; 步驟304:判斷該軟件模塊是否為模塊族登記表中的最后一個(gè),如果不是,則轉(zhuǎn)步驟.305,否則,轉(zhuǎn)步驟306 ; 步驟305:獲取模塊族登記表中下一個(gè)軟件模塊的模塊登記信息及描述信息,轉(zhuǎn)步驟.303 ; 步驟306:定義全局變量初始化周期,并設(shè)置為I ;定義軟件模塊的初始化步驟,并設(shè)置為I ; 步驟307:獲取模塊 登記表中的第一個(gè)軟件模塊; 步驟308:向該軟件模塊發(fā)送模塊初始化任務(wù)消息,并等待初始化返回結(jié)果; 步驟309:判斷初始化返回結(jié)果,如果初始化失敗,則登記系統(tǒng)錯(cuò)誤信息并返回初始化失敗,調(diào)度初始化結(jié)束;否則轉(zhuǎn)步驟310 ; 步驟310:判斷模塊初始化步驟是否小于最大初始化步驟,如果是則轉(zhuǎn)到步驟311,否則轉(zhuǎn)到步驟312 ; 步驟311:軟件模塊初始化步驟加1,轉(zhuǎn)步驟308 ; 步驟312:判斷當(dāng)前的全局變量初始化周期是否小于全局變量最大初始化周期,如果是則轉(zhuǎn)步驟313 ;否則,調(diào)度初始化結(jié)束; 步驟313:判斷當(dāng)前初始化周期是否還有軟件模塊需要進(jìn)行初始化,是則全局變量初始化周期加1,轉(zhuǎn)步驟314,否則轉(zhuǎn)步驟315 ; 步驟314:判斷該軟件模塊是否為模塊登記表中的最后一個(gè),如果不是,則轉(zhuǎn)步驟315,否則,調(diào)度初始化結(jié)束,啟動(dòng)模塊公共消息處理任務(wù)和自消息處理任務(wù); 步驟315:獲取模塊登記表中下一個(gè)軟件模塊的模塊,轉(zhuǎn)步驟308。
4.如權(quán)利要求1所述的提高嵌入式軟件代碼共享程度的方法,其特征在于,模塊公共消息處理任務(wù)的流程包括以下步驟: 步驟401:定義軟件模塊描述和任務(wù)描述的局部變量,并根據(jù)當(dāng)前運(yùn)行參數(shù)初始化該局部變量; 步驟402:等待模塊初始化事件或任務(wù)運(yùn)行事件,若為模塊初始化事件,則轉(zhuǎn)步驟403,若為任務(wù)運(yùn)行事件,則轉(zhuǎn)到驟404,其他事件繼續(xù)本步驟; 步驟403:若在當(dāng)前初始化周期內(nèi)模塊初始化接口函數(shù)不存在,則轉(zhuǎn)步驟402,否則轉(zhuǎn)步驟405 ; 步驟404:等待模塊初始化事件或消息隊(duì)列非空事件,若所述非空事件,則轉(zhuǎn)到步驟406,其他繼續(xù)本步驟; 步驟405:調(diào)用模塊初始化函數(shù)執(zhí)行當(dāng)前初始化步驟的初始化,向調(diào)度初始化模塊發(fā)送初始化結(jié)果事件,轉(zhuǎn)步驟402 ; 步驟406:依次輪詢(xún)?nèi)蝿?wù)描述里面的各個(gè)模塊,讀取消息并調(diào)用消息處理函數(shù)進(jìn)行處理,處理完成后調(diào)度釋放消息,所有消息處理完成后轉(zhuǎn)步驟404。
5.如權(quán)利要求1所述的提高嵌入式軟件代碼共享程度的方法,其特征在于,模塊自消息處理任務(wù)的流程包括以下步驟: 步驟501:定義軟件模塊描述和任務(wù)描述的局部變量,并根據(jù)當(dāng)前運(yùn)行參數(shù)初始化該變量; 步驟502:判斷模塊初始化步驟是否完成,若初始化沒(méi)有完成,則轉(zhuǎn)步驟503,否則轉(zhuǎn)到步驟504 ; 步驟503:等待任務(wù)運(yùn)行事件,若等到任務(wù)運(yùn)行事件,則轉(zhuǎn)到步驟504,否則繼續(xù)本步驟; 步驟504:調(diào)用模塊自消息處理任務(wù)函數(shù)完成模塊的指定功能; 步驟505:刪除模塊自消息處理任務(wù)。
全文摘要
本發(fā)明公開(kāi)了一種提高嵌入式軟件代碼共享程度的方法,包括以下步驟使用源文件和頭文件兩種組織形式進(jìn)行靜態(tài)配置,在軟件模塊和操作系統(tǒng)之間形成中間層;完成系統(tǒng)的頂層初始化;創(chuàng)建多個(gè)軟件模塊共享的公共消息處理任務(wù)和自消息處理任務(wù),完成調(diào)度初始化;各軟件模塊向中間層提供頂層初始化、調(diào)度初始化和消息處理函數(shù),并通過(guò)中間層實(shí)現(xiàn)各軟件模塊之間的通信,從而完成軟件模塊的初始化和相應(yīng)的消息處理。本發(fā)明,在軟件模塊和操作系統(tǒng)適配層之間提供一個(gè)模塊管理與調(diào)度的中間層,將各個(gè)模塊之間通信和模塊調(diào)度接管過(guò)來(lái),降低模塊之間的耦合,可以非常方便的將模塊做成組件獨(dú)立出來(lái),以供其他產(chǎn)品使用,提高代碼的共享程度。
文檔編號(hào)G06F9/44GK103150162SQ20131005728
公開(kāi)日2013年6月12日 申請(qǐng)日期2013年2月22日 優(yōu)先權(quán)日2013年2月22日
發(fā)明者劉應(yīng)江, 徐鑫, 劉昊, 簡(jiǎn)楹, 楊紅霞 申請(qǐng)人:烽火通信科技股份有限公司