文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2013)12-0022-03
在傳統(tǒng)的嵌入式系統(tǒng)中,嵌入式應(yīng)用軟件往往是與嵌入式處理器及嵌入式操作系統(tǒng)緊密綁定,其功能也是為某種特定的應(yīng)用而定制,缺乏靈活性和可擴(kuò)展性,軟硬件耦合緊密。隨著信息技術(shù)的發(fā)展,嵌入式處理器及嵌入式操作系統(tǒng)的能力越來越強(qiáng)大,嵌入式應(yīng)用軟件的功能也愈加復(fù)雜,以往定制開發(fā)的方法已逐漸難以滿足行業(yè)發(fā)展的需求。硬件平臺通用化、應(yīng)用軟件組件化開發(fā),以及通過動態(tài)重構(gòu)的方法實(shí)現(xiàn)應(yīng)用軟件的功能多樣化是嵌入式軟件技術(shù)發(fā)展的趨勢[1],這種方法既能實(shí)現(xiàn)良好的技術(shù)繼承,又能快速實(shí)現(xiàn)應(yīng)用軟件功能定制,體現(xiàn)軟件無線電的特征[2]。本文提出了一種基于VxWorks嵌入式操作系統(tǒng)的軟件框架設(shè)計和實(shí)現(xiàn)方法,該框架通過實(shí)現(xiàn)資源自動管理(分配與回收)、應(yīng)用組件動態(tài)加卸載等功能,配合一定的軟件組件開發(fā)規(guī)范,從而實(shí)現(xiàn)了嵌入式軟件基于組件的功能可重構(gòu)。
1 VxWorks嵌入式操作系統(tǒng)的特點(diǎn)
VxWorks嵌入式操作系統(tǒng)是由美國WindRiver公司開發(fā)的一款優(yōu)秀的商用操作系統(tǒng),目前廣泛應(yīng)用在航空、航天、軍工、工業(yè)控制等領(lǐng)域,是業(yè)界最流行的嵌入式操作系統(tǒng)之一[3],其特點(diǎn)如下:
(1)高性能的Wind內(nèi)核:Wind微內(nèi)核性能卓越,具備多任務(wù)實(shí)時調(diào)度能力,包括時間片輪轉(zhuǎn)調(diào)度和優(yōu)先級搶占調(diào)度。同時提供了諸如消息隊列、信號量、鎖等一系列任務(wù)間通信或同步機(jī)制,可以方便地實(shí)現(xiàn)多任務(wù)協(xié)同處理。
(2)良好的可裁減性:支持系統(tǒng)高度可裁剪,可以針對特定應(yīng)用裁剪某些不使用的模塊,使系統(tǒng)達(dá)到資源占用最少,而性能達(dá)到最優(yōu)。
(3)應(yīng)用程序動態(tài)加卸載、動態(tài)鏈接:支持應(yīng)用程序模塊分別編譯、在線加卸載,以及系統(tǒng)動態(tài)對多個加載的應(yīng)用程序模塊進(jìn)行鏈接,實(shí)現(xiàn)互相調(diào)用。本文設(shè)計的嵌入式軟件框架正是利用了此特性。
(4)其他特點(diǎn):VxWorks嵌入式操作系統(tǒng)支持幾乎所有的主流嵌入式處理器類型,如PowerPC、ARM等。另外系統(tǒng)API除了提供特有的Wind接口外,也同時支持標(biāo)準(zhǔn)POSIX接口,使應(yīng)用軟件跨平臺移植變得非常容易。
2 嵌入式軟件框架設(shè)計與實(shí)現(xiàn)
2.1 設(shè)計目標(biāo)
嵌入式軟件框架的設(shè)計目標(biāo)主要包括以下幾個方面:
(1)動態(tài)加卸載:系統(tǒng)上電后,能進(jìn)行應(yīng)用組件的在線加載和卸載。
(2)運(yùn)行控制:當(dāng)應(yīng)用組件被加載到內(nèi)存后,能控制其啟動運(yùn)行或停止運(yùn)行。
(3)系統(tǒng)資源管理:在操作系統(tǒng)不重新啟動的情況下,可以對任意應(yīng)用組件進(jìn)行運(yùn)行期間的資源管理,保證系統(tǒng)運(yùn)行期間無論經(jīng)過多少次的重構(gòu),系統(tǒng)資源都不會泄漏。
(4)多組件支持:在一個處理器上可以同時運(yùn)行多個應(yīng)用組件,而不互相干擾。
2.2 架構(gòu)設(shè)計
基于上述設(shè)計目標(biāo),整個系統(tǒng)可以分為4個層次:處理器層、驅(qū)動及BSP層、操作系統(tǒng)層以及應(yīng)用層。其中應(yīng)用層由嵌入式軟件框架和各個應(yīng)用組件構(gòu)成,在不同時刻加載不同應(yīng)用組件時,應(yīng)用層功能將可以隨之發(fā)生變化而無需重新加電或復(fù)位操作系統(tǒng),從而實(shí)現(xiàn)了嵌入式軟件的功能可重構(gòu)。
嵌入式軟件框架是作為一個中間層的形式運(yùn)行在操作系統(tǒng)與應(yīng)用組件之間。一方面它通過對應(yīng)用組件的動態(tài)加卸載、系統(tǒng)資源管理、多組件管理等功能實(shí)現(xiàn)了嵌入式軟件功能可重構(gòu);另一方面它為應(yīng)用組件屏蔽了底層細(xì)節(jié),使之與硬件及操作系統(tǒng)隔離,從而可以實(shí)現(xiàn)組件二進(jìn)制級復(fù)用,對于一些通用功能組件,完全無需重新修改和編譯,直接通過多組件動態(tài)重構(gòu)即可完成應(yīng)用軟件功能的重新定義,大大降低了開發(fā)成本,同時縮短了研發(fā)周期。
2.3 框架設(shè)計與實(shí)現(xiàn)
基于設(shè)計目標(biāo),本軟件框架實(shí)現(xiàn)的硬件平臺為基于PowerPC8640D高性能處理器的信號處理板,操作系統(tǒng)為VxWorks6.6,開發(fā)環(huán)境為WorkBench3.0??蚣懿捎媚K化設(shè)計,主要包括系統(tǒng)接口模塊、系統(tǒng)資源管理模塊、重構(gòu)控制模塊。嵌入式軟件框架頂層結(jié)構(gòu)及接口框圖如圖1所示。
重構(gòu)控制模塊通過重構(gòu)控制接口與外部的重構(gòu)管理軟件進(jìn)行通信,在外部重構(gòu)管理軟件的控制下實(shí)現(xiàn)對指定應(yīng)用組件的加載、運(yùn)行、停止、卸載等功能。在沒有重構(gòu)管理軟件的情況下,還可以以配置文件的方式通過配置文件接口實(shí)現(xiàn)重構(gòu)控制。應(yīng)用組件通過重構(gòu)API接口與軟件框架進(jìn)行交互,其中每個應(yīng)用組件必須實(shí)現(xiàn)兩個重構(gòu)控制接口Run()和Stop()以被軟件框架調(diào)用,其中Run()是框架啟動組件運(yùn)行的接口,Stop()是框架停止組件運(yùn)行的接口。而框架實(shí)現(xiàn)了應(yīng)用組件注冊和注銷兩個接口:RCFGS_Module_Register()和RCFGS_Module_LogOut(),其中RCFGS_Module_Register()是組件開始運(yùn)行時向框架注冊的接口函數(shù),該接口將返回一個該組件運(yùn)行期間唯一的ID號;而RCFGS_Module_LogOut()是組件停止運(yùn)行后向框架注銷的接口函數(shù),該函數(shù)的輸入?yún)?shù)就是組件ID號,框架正是通過該ID實(shí)現(xiàn)了組件運(yùn)行時的系統(tǒng)資源管理。一個應(yīng)用組件將按圖2所示流程完成重構(gòu)過程。
系統(tǒng)資源管理模塊主要實(shí)現(xiàn)每個應(yīng)用組件資源管理表資源的分配與回收。系統(tǒng)剛上電時,系統(tǒng)資源管理模塊將對所有的組件注冊總表和組件資源管理表進(jìn)行清零和初始化工作。一旦應(yīng)用組件通過調(diào)用Run()接口被啟動時,將向框架注冊,成功后,系統(tǒng)資源管理模塊將根據(jù)組件ID向該組件分配其唯一使用的組件資源管理表,并在組件注冊總表中進(jìn)行記錄,以確保組件資源管理表不會被重復(fù)分配,進(jìn)而確保其唯一性。應(yīng)用組件運(yùn)行期間將系統(tǒng)申請的各種資源(如任務(wù)、消息隊列、信號量等)一一記錄在其組件資源管理表中,在需要將應(yīng)用組件卸載前,執(zhí)行調(diào)用組件的Stop()接口,應(yīng)用組件將向框架進(jìn)行注銷,注銷時系統(tǒng)資源管理模塊將組件資源管理表中記錄的應(yīng)用組件運(yùn)行期間申請的系統(tǒng)資源一一釋放,再將該組件資源管理表初始化,以備下一個應(yīng)用組件注冊時分配。通過此過程,實(shí)現(xiàn)了系統(tǒng)資源的自動管理,而不會導(dǎo)致資源泄漏。組件注冊總表和組件資源管理表的實(shí)現(xiàn)代碼片段如圖3所示。
系統(tǒng)接口模塊是將涉及系統(tǒng)資源分配與回收的操作系統(tǒng)的API進(jìn)行二次封裝,封裝的操作系統(tǒng)函數(shù)庫包括ioLib、taskLib、kernelLib、msgQLib、rngLib、semBLib、semCLib、semLib、semMLib、semSmLib、sockLib、sysLib、tickLib、hashLib[1,2]等,二次封裝的函數(shù)具備與原API相似的接口,具備很強(qiáng)的規(guī)律性,為應(yīng)用組件快速開發(fā)或移植提供了便利。其封裝規(guī)則如下:
原API:type FuncName(a,b…)
封裝后的API格式:type RCFGS_FuncName(i_id,a,b…),其中,輸入變量i_id是每個組件注冊成功后獲得的唯一的組件ID。
在系統(tǒng)接口模塊中所有原操作系統(tǒng)API均可分為資源申請、資源使用、資源釋放三類,每類的處理流程相似。本文以消息隊列API為例進(jìn)行說明,其中msgQCreate[4-5]為資源申請類型,msgQSend[4-5]為資源使用類型,msgQ-Delete[4-5]為資源釋放類型。封裝為RCFGS_msgQCreate、RCFGS_msgQSend、RCFGS_msgQDelete后這三類API對應(yīng)的處理流程如圖4所示。
本文分析了嵌入式軟件發(fā)展的趨勢,以嵌入式軟件可重構(gòu)需求為出發(fā)點(diǎn),介紹了一種基于應(yīng)用組件加卸載來實(shí)現(xiàn)嵌入式應(yīng)用功能可重構(gòu)架構(gòu)和方法。該架構(gòu)中以嵌入式軟件框架為核心,通過介紹嵌入式軟件框架的設(shè)計和實(shí)現(xiàn),闡明了進(jìn)行應(yīng)用組件重構(gòu)的過程和方法。目前該框架已基于PowerPC8640D硬件平臺和Vxworks6.6操作系統(tǒng)進(jìn)行了實(shí)現(xiàn),其各項(xiàng)設(shè)計功能均得到實(shí)現(xiàn),并可穩(wěn)定運(yùn)行。該框架的實(shí)現(xiàn)解決了傳統(tǒng)的嵌入式應(yīng)用定制開發(fā)中效率低、周期長、維護(hù)困難的問題,大大提高了開發(fā)和維護(hù)效率,同時大幅度提高了嵌入式應(yīng)用功能的靈活性。
參考文獻(xiàn)
[1] 石煒,鄧偉.基于VxWorks的星載控制計算機(jī)動態(tài)可重構(gòu)研究[J].電子設(shè)計工程,2009,21(6):30-33.
[2] 肖朝暉.計算機(jī)體系結(jié)構(gòu)的發(fā)展及技術(shù)問題探討[J].微型機(jī)與應(yīng)用,2009,32(12):1-3.
[3] 周俊杰,何攀峰.基于Vxworks的實(shí)時多任務(wù)軟件框架設(shè)計[J].國外電子測量技術(shù),2012,31(4):80-82.
[4] Wind River,Inc..VxWorks programmer′s guide5.5[Z].Wind River Systems,Inc.,2003.
[5] Wind River,Inc..VxWorks application programmer′s guide 6.6[Z]. Wind River Systems,Inc.,2007.