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