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