摘 要: 以某實際項目開發為例,通過采用在嵌入式操作系統中基于模型設計的程序開發方式,實現了在VxWorks系統下使用UML建模的方式進行應用程序開發。具體包括使用UML進行項目需求分析、系統建模、開發環境配置、系統具體設計和程序調試等內容。目前這種自頂向下的迭代式開發模式已成功應用于多個項目中,可提高程序開發效率、縮短項目的開發周期。
關鍵詞: 系統建模; UML; Rhapsody; VxWorks
中圖分類號: TN919?34; TP311.1 文獻標識碼: A 文章編號: 1004?373X(2013)16?0041?04
0 引 言
VxWorks操作系統[1]作為高性能嵌入式實時操作系統,具有進程管理、存儲管理、設備管理、文件系統管理、網絡協議及系統應用等多種功能,并可以實現實時多任務調度、多中斷管理、實時的系統資源分配以及實時的任務間通信。在開發基于VxWorks系統的應用程序時如果僅僅依靠程序員進行傳統的代碼編程調試,則很難發揮出其的強大功能進而設計出可靠、高效的嵌入式應用系統,因此必須要有與之相配套的開發工具。
UML(統一建模語言)是構建系統模型尤其是軟件系統模型的標準方法[2]。使用它進行系統建模,可以使用戶專注于系統設計的重要部分,收集關鍵信息,編制文檔以便在各個系統組成部分之間建立通信。Rhapsody是一種遵循UML 2.0標準的基于模型驅動的(Model?Driven Development,MDD)軟件開發平臺[3],其專門針對嵌入式操作系統設計,實現了基于UML2.0的可視化建模。為開發嵌入式應用系統提供了從軟件分析、設計一直到代碼實現和測試的開發環境。
1 系統建模
1.1 項目需求分析
以某項目開發為例,該項目是根據某裝備的實際操作流程建立一個模擬的訓練環境。包括信息顯控和信息處理兩個子系統,其中信息顯控子系統主要由主界面、參數裝定、故障診斷以及模擬訓練界面的顯示操作處理等4個部分組成;信息處理子系統則包括CAN總線(CAN1,CAN2)數據、串口 (COM1,COM2)數據、同步信號數據的采集處理,以及模擬數據源的產生。整個項目的功能需求分析使用基于UML的用例圖(User Case Diagrams)描述如圖1所示[4]。
1.2 系統建模
根據項目的功能需求分析[5],將系統從頂層劃分為三個對象模塊,如圖2所示,分別為界面顯示與人機交互操控處理模塊(itsGUIPro)、底層通信處理模塊(itsHWPro)和GUI與底層的接口對象模塊(itsIface),其各自的對象組成模型如圖3~圖5所示。
2 系統設計
系統運行于基于X86架構的硬件體系中,系統程序的開發采用上位機?目標機(Host?Target)交叉開發模式[6]。在上位機中進行應用程序的開發,通過局域網將應用程序下載到運行Vxworks操作系統的目標機中進行在線調試。系統開發模式如圖6所示。
運行于上位機中的開發環境為Tornado 2.2和Rhapsody 6.1。具體為:在Tornado 2.2中完成對運行于目標機上的VxWorks操作系統組件的裁剪配置及編譯生成映像文件;Rhapsody 6.1則進行系統建模和軟件設計實現。項目采用面向對象的設計方法替代了傳統的結構化設計,共由8個任務組成,并按優先級從高到低的順序排列。
2.1 嵌入式系統生成
根據項目使用的X86架構平臺制作基于PentiumIII CPU的 BSP包;在Tornado 2.2中創建基于該BSP包的bootable工程,并根據項目實際需要裁剪了VxWorks操作系統包含的組件,最終編譯生成了Bootrom文件和VxWorks映像文件,并通過局域網下載到目標機上進行在線調試,VxWorks操作系統可正常初始化啟動且圖形模式下測試程序運行正常。
2.2 應用程序開發
2.2.1 Rhapsody 6.1環境配置
首先在Rhapsody 6.1中新建工程,雙擊工程瀏覽窗口的DefaultConfig,彈出Configuration對話框,單擊Propertys選項卡,將CPP_CG\Configuration\Envirenment選項修改為VxWorks,CPP_CG\VxWorks\BSP選項修改為PENTIUM3;單擊Settings選項卡,添加工程庫文件和頭文件目錄,具體如圖7所示。
2.2.2 建立狀態圖
接下來依據1.2節中系統的建模結果,對模型中各對象的基類屬性和操作進行具體實現。在實現各對象功能的基類中采用了事件觸發有限狀態機之間自動進行轉移來管理對象生命周期中的所有活動,這樣各對象之間以及對象內部之間的動態交互流程更為清晰,增強了程序的可讀性[7]。頂層設計中對象模塊itsGUIPro和itsHWPro的功能實現狀態圖如圖8,圖9所示,接口模塊itsIface對象中的屬性和操作僅供對象itsGUIPro和itsHWPro在各自的功能實現中調用,故沒有獨立的狀態圖。
2.2.3 程序實現
限于篇幅,僅就對itsHWPro對象從創建到銷毀整個生命周期的關鍵代碼進行說明。
cl_HWPro * cl_HWPro_Create(RiCTask * p_task) //itsHWPro對象的創建
{
cl_HWPro* me = (cl_HWPro *) malloc(sizeof(cl_HWPro));//為對象動態分配內存
if(me!=NULL)
{
cl_HWPro_Init(me, p_task); //itsHWPro對象初始化
}
DYNAMICALLY_ALLOCATED(me);//指定對象可動態調用
return me;
}
void cl_HWPro_Init(cl_HWPro* const me, RiCTask * p_task) //itsHWPro對象初始化
{
RiCTask_Init((me?>ric_task), \"tHW\", 50, RiCOSDefaultStackSize, RiCOSDefaultMessageQueueSize, RiCFALSE, NULL); //開始一個名為“tHW”的任務
/*變量初始化*/
me?>can2sendflag = FALSE;
…
RiCReactive_setActive((me?>ric_reactive), RiCTRUE); //激活對象狀態圖
initRelations(me);
// itsHWPro對象的內部對象調用關系初始化
initStatechart(me);
//itsHWPro對象的活動狀態圖初始化
…
}
void cl_HWPro_ProCAN2Send(cl_HWPro* const me)/* itsHWPro對象狀態圖中狀態can2sendpro中調用函數*/
{
int index=?1,icount=0;
index=cl_ProStack_StackPop(me?>itsInterface_SI?>itsCANevStk[2]); //彈出發送事件索
//引號
if(index!=?1) //索引號有效
{
memcpy(me?>itsCANPro.AllMsgSendtoCan,me?>itsInterface_SI?>AllSendData,
sizeof(UnAllCanData)); //從數據接口中取需發送數據
}
while(index!=?1)
{
if(cl_CANPro_CAN2WrtMsgPro(me?>itsCANPro,
me?>itsInterface_SI?>CAN2SendEv[index]));// 處理發送數據
...
index=cl_ProStack_StackPop(me?> itsInterface_SI?>itsCANevStk[2]); //彈出發送
//事件索引號
}
cl_CAN_CAN2Write(me?>itsCAN);
//將數據發送到CAN總線
}
void cl_HWPro_Destroy(cl_HWPro* const me)
// itsHWPro對象的銷毀
{
if(me!=NULL)
{
cl_HWPro_Cleanup(me); //結束狀態圖活動并釋放其占用內存
}
free(me); //釋放對象內存
}
…
2.2.4 系統調試
Rhapsody 6.1中通過創建生成順序圖來捕捉對象之間的消息映射從而進行系統模型級的調試和驗證。以在Rhapsody 6.1中實現itsHWPro對象功能程序的調試為例,調試運行時得到的順序圖片段如圖10所示。通過這種直觀地方式能夠盡早發現系統中存在的設計錯誤或缺陷,從而在很大程度上降低了項目風險。
3 結 語
通過在嵌入式系統開發中使用UML對系統進行功能需求分析,建立迭代式模型,進而最終根據模型進行了代碼實現。經項目開發實踐證明,這種面向對象的開發模式可有效提高軟件重用率,縮短系統開發時間,加快項目的研發速度,代表了軟件開發自動化的發展方向。
參考文獻
[1] 王金剛,宮霄霖.基于VxWorks的嵌入式實時系統設計[M].北京:清華大學出版社,2004.
[2] [美]SCHMULLER Joseph. UML基礎、案例與應用[M].李虎,趙龍剛,譯.北京:人民郵電出版社,2006.
[3] 孫強,張振華.使用Rhapsody軟件框架和UML的實時系統開發[J].單片機與嵌入式系統應用,2003(2):63?65.
[4] [美]BOOCH Grady. UML用戶指南[M].邵維忠,譯.2版.北京:人民郵電出版社,2006.
[5] [美]LARMAN Craig.UML和模式應用[M].姚淑珍,李虎,譯.北京:機械工業出版社,2002.
[6] 孔祥營,柏桂枝.嵌入式實時操作系統VxWorks及其開發環境Tornado[M].北京:中國電力出版社,2002.
[7] [美]BRUEGGE Bernd,[美]DUTOIT AllenH.面向對象的軟件工程[M].吳丹,譯.北京:清華大學出版社,2002.