張士福
(船舶重工集團公司723所,揚州 225001)
VxWorks是由美國風河公司(Wind River Systems Inc.)開發(fā)的一套微內核、高可靠、可裁減的嵌入式實時操作系統(tǒng),它以高效的實時任務調度、中斷管理等優(yōu)點成為航空、航天、醫(yī)療、通信等領域首選的操作系統(tǒng)。VxWorks開發(fā)之初并沒有提出很好的、完整的圖形顯示方案,隨著該操作系統(tǒng)應用領域的不斷擴展,風河公司改善了圖形產(chǎn)品開發(fā)中存在的不足,提出了基于嵌入式系統(tǒng)的顯示技術風河多媒體庫(WindML)。WindML為VxWorks操作系統(tǒng)提供對基本圖形、圖像和音頻的支持,是開發(fā)標準用戶設備驅動程序的框架,它為用戶提供了進行圖形界面開發(fā)的應用程序接口(API)。利用WindML提供的API進行圖形界面開發(fā)對開發(fā)人員要求特別高,需要編寫大量的代碼,存在開發(fā)周期長、界面程序可移植性差等特點。針對嵌入式圖形界面開發(fā)面臨的困難,出現(xiàn)了一些第3方的圖形開發(fā)支持軟件,典型的有Tilcon、Zinc等,用戶利用這些軟件工具可以實現(xiàn)“拖-放”式的圖形界面設計,把用戶從大量編碼的圖形界面開發(fā)方式中解放出來,大大簡化了嵌入式系統(tǒng)的圖形界面開發(fā)過程。
本文重點探討Wind River VxWorks 5.5下利用Tilcon進行窗口圖形界面開發(fā)的方法。
Tilcon是加拿大 Tilcon軟件公司推出的多平臺圖形用戶界面(GUI)開發(fā)工具,其界面開發(fā)包(IDS)集成開發(fā)環(huán)境能夠在 VxWorks、Linux、WinCE、QNX等嵌入式實時操作系統(tǒng)下設計出健壯且交互性極強的“人-機-環(huán)”應用軟件。
Tilcon集成了大量的成熟控件,用戶無需調用C語言uglLine()等繪圖函數(shù)以畫線填充的方式來完成GUI設計,極大地簡化了用戶開發(fā)過程,所開發(fā)的程序不需要修改代碼就可以從一個操作系統(tǒng)移植到另一個操作系統(tǒng)上。
Tilcon可以與Tornado之間形成無縫鏈接,圖1描繪出兩者之間的交叉關系。該工具具有功能齊全、界面美觀、使用方便的特點,開發(fā)的圖形應用程序具有可裁剪性強、運行效率高、顯示效果好等優(yōu)點。目前,Tilcon已廣泛應用于航空航天、裝甲車、潛艇等應用領域,得到了用戶的一致好評,成為Wind River開發(fā)環(huán)境首推的圖形界面開發(fā)工具,在嵌入式領域有著廣泛的應用前景。
圖1 Tilcon與VxWorks的集成開發(fā)環(huán)境Tornado的關系
Tilcon圖形界面開發(fā)系統(tǒng)主要由三部分組件組成,即嵌入式圖形界面引擎(EVE)、應用程序接口API和可視化界面設計工具,其組成及工作原理如圖2所示。
圖2 Tilcon組成及工作原理
嵌入式圖形界面引擎是一個事件驅動的微內核,獨立于用戶應用程序,其主要任務是驅動、管理所有的用戶界面顯示及人機交互事件。用戶應用程序僅需使用內核提供的實時接口函數(shù),這種圖形交互界面和用戶程序相互獨立的結構提高了用戶界面程序的可修改性、可移植性和可維護性。
應用程序接口是一組便于理解、使用的接口函數(shù),獨立于嵌入式平臺,為用戶應用程序提供操作訪問圖形界面引擎的接口,支持控件對象的動態(tài)創(chuàng)建、對象屬性修改等操作。
可視化界面設計工具為用戶提供便捷的界面設計環(huán)境,用戶只需對控件對象面板的控件進行簡單的“拖-放”式操作就可以構建復雜的應用圖形界面,所有控件的顯示風格和功能可以通過對象屬性頁進行方便的修改。
首先,用戶使用Tilcon提供的可視化界面設計工具構建圖形界面,其以二進制形式保存到與平臺無關的TWD文件中,用戶程序使用Tilcon API函數(shù)命令圖形引擎裝載TWD文件,并控制圖形引擎完成圖形界面的顯示。當一個GUI事件產(chǎn)生時,圖形引擎接收到事件后,根據(jù)事件類型決定直接處理或通知用戶程序處理該事件。另一方面,當用戶程序發(fā)送API命令給Tilcon圖形引擎的命令隊列,用戶程序不需要等待這些異步的命令處理完畢就可以直接返回到自己的主要任務中,圖形引擎將負責完成這些命令的解釋處理。
利用 Tilcon進行圖形界面開發(fā)應用時,需對WindML與Tilcon進行相應的配置、編譯和連接,并完成 VxWorks操作系統(tǒng)配置?;?Tilcon的VxWorks圖形界面及應用程序開發(fā)的主要流程如圖3所示。
圖3 基于Tilcon的VxWorks圖形界面及應用程序開發(fā)流程
WindML是Wind River公司推出的多媒體支持庫,是Tilcon在VxWorks系統(tǒng)上工作運行的基礎。在使用Tilcon之前必須先配置編譯WindML。
進入 Tornado集成開發(fā)環(huán)境后,依照 Tools/WindML/Configure步驟打開相應配置對話框,結合嵌入式系統(tǒng)的具體硬件構成,按圖4流程配置對應選項,處理完成后點擊“Clean”清除已有編譯文件,再單擊“Build”按鈕重新生成所須OBJ文件。若這些操作還不能滿足使用要求,還可以用命令行方式配置并編譯WindM L媒體庫,如果沒有錯誤提示信息,則會在Tornado項目管理區(qū)VxWorks標簽頁中出現(xiàn)WindML組件。為檢驗WindML媒體庫配置、編譯是否成功,按如下路徑關系$(WIND_BASE) argetsrcuglexample定位到ugldemo.c文件,并在 Tornado環(huán)境下建立Downloadable工程,經(jīng)編譯下載運行后,如果能在目標機上出現(xiàn)歡迎界面,則表示W(wǎng)indML操作成功。
圖4 WindML配置編譯流程
Tilcon提供了圖形引擎定制工具Scalable,利用該工具用戶可以靈活選擇工程應用中必需的組件,除去不必要的組件,并鏈接生成較小的Tilcon內核,減小Tilcon應用程序對系統(tǒng)控件的需求。
Tilcon定制的主要過程包括:首先將C:TilconTSPVXWORKS-x86 argetlib下的 obj-PENTIUMgnuTugcl文件夾復制到C:Tornado2.2 argetlib路徑下。然后啟動配置工具Scalable,選擇VxWorks版本信息和處理器類型,并在控件選項中選擇所需要的控件,工具會自動生成相應的Makefile,點擊創(chuàng)建按鈕后將鏈接objPENTIUMgnuTugcl文件夾中的組件生成支持IDS應用程序模型的目標靜態(tài)庫文件tlncore.o和tlnapi.o。
配置和編譯好WindML和Tilcon后,根據(jù)工程應用需要在VxWorks工程中對VxWorks進行配置,需將C++Components、WindML媒體庫組件下的2D Graphics和Complete 2D Library子項以及POSIX Components組件下的 POSIX Clocks、POSIX Message Queues、POSIX Semaphores 和POSIX Timers子項包含進VxWorks工程中,編譯生成VxWorks鏡像。
然后,配置Downloadable工程編譯環(huán)境。在C/C++compiler標簽頁,具體選項如下:-g –mcpu=pentium–march=Pentium–nostdlib–fno-builtin–fno-defer-pop–I–IC:/Tornado2.2/target/h–IC:/tilcon/include–DCPU=PENTIUM –DTOOL_FAMILY=gnu–DTOOL=gnu –DCC_TRT_VXWORKS,這其中務必去掉-ansic選項,因為VxWorks可能會包含某些特殊字符信息,如果按-ansic語法進行編譯就會出現(xiàn)錯誤提示信息。另外,在Macros標簽頁下的PRJ_LIBS宏選項中,將目標靜態(tài)庫文件tlncore.o和tlnapi.o連接到工程中。
最后,在Bootable工程項目 usrAppInit.c文件中指定 Tilcon所使用的版本序列號,即:putenv(“ Tilcon_5_4=/tgtsvr”)。
Tilcon窗口的開發(fā)主要通過Tilcon圖形編輯器來實現(xiàn),Tilcon圖形編輯器是一組集成的設計工具,用來輔助用戶完成圖形界面的設計。在使用Tilcon圖形編輯器構建圖形界面的屏幕顯示時,以“拖-放”的方式從工具欄添加用戶界面對象,并打開屬性框編輯對象的屬性,通過屬性項的設定調整對象的所有外觀效果、行為、初始狀態(tài)、文本方式、顯示焦點、菜單、鼠標指針和快捷鍵等。編輯完成之后,設計的圖形界面保存為TWD文件,用戶可以點擊測試按鍵來檢驗整個圖形界面的運行效果。另外,Tilcon可以使用用戶指定的模擬數(shù)據(jù)在測試狀態(tài)下驅動各個對象。
使用Tilcon IDS設計好圖形界面后,便可開展相應的圖形界面應用程序編寫工作,基于Tilcon的應用程序執(zhí)行流程如圖5所示。
圖5 基于Tilcon的應用程序執(zhí)行流程
2.5.1 初始化內核
Tilcon圖形引擎是一個小型的事件驅動圖形處理內核,它的任務是更新屏幕顯示。它是一個與用戶程序相互獨立的進程,負責處理所有的屏幕顯示和用戶輸入事件。在圖形界面程序啟動之前,用戶程序必須先初始化Tilcon圖形引擎內核,設定操作系統(tǒng)類型Os_Env、對象空間名AppName、Licence文件路徑等參數(shù)。使用 TRT_Start函數(shù)啟動一個Tilcon圖形引擎并與此引擎進行通信。正確完成初始化后,應用程序可以顯示用戶設計的界面,與用戶進行交互。
2.5.2 加載資源文件
執(zhí)行完必要的初始化操作后,用戶程序就可以使用Tilcon API函數(shù)命令圖形引擎裝載并顯示用戶界面窗口或動態(tài)創(chuàng)建用戶界面。首先指定窗口資源文件所在的路徑,然后通過調用 TRT_Window-Load函數(shù)把圖形界面資源文件加載到圖形引擎中,這樣用戶程序就可以通過Tilcon API和Tilcon圖形引擎進行通信來控制圖形界面的顯示和刷新。
2.5.3 窗口顯示管理
窗口管理主要指對已加載到圖形引擎中的窗口進行顯示、隱藏、刪除等操作管理。Tilcon提供了一系列對窗口管理的API函數(shù),調用T RT_Window-Display函數(shù)可實現(xiàn)把用戶定義的窗口顯示到屏幕上的操作。當不再需要某個窗口的顯示時,可通過調用T RT_Window Hide函數(shù)把窗口隱藏起來,或調用T RT_WindowDelete函數(shù)直接把窗口刪除,刪除窗口的同時,所有窗口上的控件也會被一起清除。
2.5.4 窗口事件處理
基于Tilcon圖形界面用戶程序是通過一個主事件循環(huán)來處理相應窗口事件,實現(xiàn)人機交互功能。在主循環(huán)中,T RT_GetInput函數(shù)等待直到圖形引擎報告一個事件,調用窗口事件處理函數(shù)進行處理。
用戶可以配置TRT_GetInput函數(shù)接收來自其它進程的消息,或設置為等待某種事件信號量的到來,這使得用戶程序可以和其它進程進行通信。當某個特定的事件出現(xiàn)時,用戶程序會中止循環(huán)并調用T RT_Exit函數(shù)通知圖形引擎結束進程。
2.5.5 應用示例
用Tilcon圖形開發(fā)工具在VxWorks操作系統(tǒng)下,結合T ornado工具開發(fā)的一個示波器面板如圖6所示。模擬測試時,Tilcon畫圖對象Charts畫正弦曲線,對參數(shù)進行設置,可看到不同的測試效果。
圖6 示波器面板設計
Tilcon作為Wind River新支持的革命性圖形界面開發(fā)工具,為用戶提供了功能齊全的控件,擁有出色的高效率、模塊化和可裁剪交互面板設計能力,其頂層應用界面與底層功能驅動代碼相互獨立,因此具備很強的跨平臺移植能力,將開發(fā)人員從繁瑣的嵌入式系統(tǒng)界面開發(fā)中脫離出來,正被廣泛地應用到嵌入式實時操作系統(tǒng)領域。本文介紹了Tilcon圖形界面開發(fā)工具,探討了利用該工具設計用戶界面及開發(fā)應用程序的過程。目前,Tilcon已在某艦指控系統(tǒng)軟件開發(fā)中得到應用,工程應用表明,Tilcon在功能、性能方面都能滿足基于VxWorks的實時系統(tǒng)圖形界面開發(fā)要求,是理想的嵌入式系統(tǒng)圖形界面開發(fā)解決方案。
[1]Wind River Systems Inc.VxWorks Programmer's Guide 5.5[M].USA,Alameda:Wind River Systems Inc,2002.
[2]Tilcon Software Ltd.Tilcon Programmer's Guide[M].CA,Ottawa:Tilcon Software Ltd,2005.
[3]Wind River Systems Inc.WindML SDK Programmer's Guide 3.0[M].USA,Alameda:Wind River Systems Inc,2002.