當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件

摘要:本文主要分析介紹了Vxworks系統(tǒng)的媒體庫(kù)WindML的結(jié)構(gòu)和特點(diǎn),并嘗試在嵌入式系統(tǒng)下,特別是在更具難度的Vxworks系統(tǒng)下,進(jìn)行移植WorldWind軟件。

隨著多媒體信息技術(shù)、互聯(lián)網(wǎng)技術(shù)、通信技術(shù)產(chǎn)品智能化趨勢(shì)的加強(qiáng),嵌入式系統(tǒng)以其占用內(nèi)存少、高性能、具有完全的可伸縮性、性能穩(wěn)定等特點(diǎn)得到了越來(lái)越廣泛的應(yīng)用。

其應(yīng)用主要包括網(wǎng)絡(luò)通信、航空航天、醫(yī)療儀器、狀態(tài)監(jiān)控以及消費(fèi)電子產(chǎn)品等領(lǐng)域。是美國(guó)VxWorks WindRiver System Inc.公司推出的強(qiáng)實(shí)時(shí)嵌入式操作系統(tǒng),它在高可靠、高實(shí)時(shí)性、高性能領(lǐng)域有獨(dú)到的優(yōu)勢(shì)和廣泛的應(yīng)用,特別是因?yàn)槌晒?yīng)用于火星探路器而名聲大噪。本文將主要圍繞VxWorks操作系統(tǒng)的圖形用戶接口的實(shí)現(xiàn)機(jī)制進(jìn)行分析,討論WorldWind軟件的移植。

1 WorldWind 軟件概述

NASA 就是我們所熟知的美國(guó)航天宇航局,在美國(guó)的高調(diào)宣傳之下與FBI 一樣如雷貫耳,能夠使用NASA 所開(kāi)發(fā)的軟件會(huì)不會(huì)有一種特殊的心情呢?WorldWind(簡(jiǎn)稱(chēng)WW)就是一款出身高貴的軟件,擁有NASA 的血統(tǒng)。同時(shí)它也是一款特殊的軟件。華麗的界面,出彩的圖象,完全自主的功能應(yīng)用,完全可以和GoogleEarth(簡(jiǎn)稱(chēng)GE)軟件相媲美。它與GoogleEarth最大的優(yōu)勢(shì)在于它的代碼開(kāi)源,這樣便于我們更加深入的了解他。這也是WW 比GE 更受大家的青睞的最重要的原因。同時(shí)也為我們這些愛(ài)好者移植該軟件提供了方便。

1.1 Add-On 功能

WW 是一款可以讓用戶通過(guò)從太空視角全面觀察地球表面的軟件,以他優(yōu)秀的衛(wèi)星圖庫(kù)與地形資料,通過(guò)3D 技術(shù)的應(yīng)用,讓用戶擁有身臨其境的感覺(jué)。與同類(lèi)型軟件一樣,亦可以使用圖層功能來(lái)方便使用者更快的索取自己想要的信息。不過(guò)不同的是WW 的圖層更為強(qiáng)大。這一切都得益于他的一個(gè)名為Add-On 的功能。此功能讓你不光可以享有官方所提供的圖層數(shù)據(jù),更為讓人興奮的是由于WW 為開(kāi)源軟件,他允許其他第三方人員為它提供編寫(xiě)的成品圖層功能。圖層是做什么用的?簡(jiǎn)單的來(lái)說(shuō),如果WW 給我們提供的模型球體是這款軟件的骨架,那么圖層則就是WW 的血脈,肌肉。兩者是相輔相成的關(guān)系,骨架固然重要,但是人與人的不同并不簡(jiǎn)單的體現(xiàn)在骨架上,更多的是依靠血脈,肌肉來(lái)體現(xiàn)。這個(gè)功能就是為了讓軟件更為豐滿,給于其很高的增長(zhǎng)潛力,而同類(lèi)型的 GE 則較之遜色的多了。

1.2 DDS 圖片WW 默認(rèn)設(shè)置中將下載到本地的圖片(一般是jpg 格式)轉(zhuǎn)換為dds 格式,這樣本地的cache 中都是dds 文件,一般說(shuō)來(lái)同樣分辨率的dds 文件比jpg 文件大。我通過(guò)修改默認(rèn)設(shè)置,不讓W(xué)W 轉(zhuǎn)為dds 格式,直接用jpg 格式,發(fā)現(xiàn)WW 中顯示效果差不多,地形也能正確渲染。

DDS 是DirectDraw Surface 的縮寫(xiě),它是DirectX 紋理壓縮(DirectX TextureCompression,簡(jiǎn)稱(chēng)DXTC)的產(chǎn)物。許多3D 軟件包括大部分游戲都用dds 格式,又稱(chēng)“貼圖”,許多fans 通過(guò)修改dds 文件可以生成特殊顯示效果。在WW 中也用到了其它格式的圖片:JPEG:(文件擴(kuò)展名為jpg 或jpeg)應(yīng)用最廣泛的圖片格式之一,它采用一種特殊的有損壓縮算法,將不易被人眼察覺(jué)的圖像顏色刪除,從而達(dá)到較大的壓縮比(可達(dá)到2:1 甚至40:1),所以“身材嬌小,容貌姣好”,特別適用于網(wǎng)絡(luò)環(huán)境。

PNG:與JPEG 格式類(lèi)似,網(wǎng)頁(yè)中有很多圖片都是這種格式,壓縮比高于GIF,支持圖像透明,可以利用Alpha 通道調(diào)節(jié)圖像的透明度。BMP:Windows 系統(tǒng)下的標(biāo)準(zhǔn)位圖格式,使用很普遍。其結(jié)構(gòu)簡(jiǎn)單,未經(jīng)過(guò)壓縮,一般圖像文件會(huì)比較大。它最大的好處就是能被大多數(shù)軟件“接受”,可稱(chēng)為通用格式。

GIF:分為靜態(tài)GIF 和動(dòng)畫(huà)GIF 兩種,支持透明背景圖像,適用于多種操作系統(tǒng),“體型”很小,網(wǎng)上很多小動(dòng)畫(huà)都是GIF 格式。其實(shí)GIF 是將多幅圖像保存為一個(gè)圖像文件,從而形成動(dòng)畫(huà),所以歸根到底GIF 仍然是圖片文件格式。

2 VxWorks 系統(tǒng)概述

VxWorks是美國(guó)WindRiver公司開(kāi)發(fā)的,具有工業(yè)領(lǐng)導(dǎo)地位的高性能嵌入式實(shí)時(shí)操作系統(tǒng)。VxWorks具有專(zhuān)門(mén)為實(shí)時(shí)嵌入式系統(tǒng)設(shè)計(jì)開(kāi)發(fā)的操作系統(tǒng)內(nèi)核,提供了高效的實(shí)時(shí)多任務(wù)調(diào)度、中斷管理,實(shí)時(shí)的系統(tǒng)資源以及實(shí)時(shí)的任務(wù)間通信?;赩xWorks操作系統(tǒng)的應(yīng)用程序可以在不同的CPU平臺(tái)上輕松移植。VxWorks只占用了很小的存儲(chǔ)空間,并可高度裁減,保證了系統(tǒng)能以較高的效率運(yùn)行。VxWorks以其卓越的性能被廣泛地應(yīng)用在通信、軍事、航空、航天等實(shí)時(shí)性要求極高因而普通操作系統(tǒng)難以勝任的領(lǐng)域中,美國(guó)的F-16戰(zhàn)斗機(jī)、B-2隱形轟炸機(jī)和愛(ài)國(guó)者導(dǎo)彈及火星控測(cè)器“探路者”上都使用了VxWorks。

在VxWorks的一般嵌入式應(yīng)用中,可以選擇Zinc For VxWorks或WindML來(lái)進(jìn)行圖形界面設(shè)計(jì),它們都是VxWorks中的可裁減的多媒體組件,都可以在VxWorks操作系統(tǒng)上以較低的系統(tǒng)開(kāi)銷(xiāo)實(shí)現(xiàn)豐富多彩的圖形界面。Zinc是一套完善的圖形用戶界面開(kāi)發(fā)工具,適用于為高性能嵌入式設(shè)備開(kāi)發(fā)低內(nèi)存開(kāi)銷(xiāo)、本地編譯的圖形化用戶接口。WindML是將 Zinc和硬件設(shè)備之間連接在一起的簡(jiǎn)捷高效的通用多媒體圖形庫(kù)。WindML主要提供了對(duì)芯片、輸入/輸出設(shè)備、音頻/視頻、幀緩沖器等的開(kāi)放的應(yīng)用程序接口(API)。因此,Zinc必須通過(guò)調(diào)用多媒體圖形庫(kù)WindML的應(yīng)用程序接口來(lái)實(shí)現(xiàn)其圖形功能。Zinc屬于高端應(yīng)用,組件的價(jià)格也較貴,而WindML在大多數(shù)情況下已經(jīng)足可以滿足應(yīng)用需求了。而且,WindML編程也比較靈活,有更大的自由度。因此,一般是選用WindML來(lái)作圖形界面設(shè)計(jì)。

3 WindML

3.1WindML 的系統(tǒng)結(jié)構(gòu)和功能

WindML是基于實(shí)時(shí)嵌入式操作統(tǒng)的多媒體應(yīng)用的支持鏈接庫(kù),它提供VxWorks基本的圖形、視頻、音頻技術(shù)支持,并提供定制設(shè)備驅(qū)動(dòng)的標(biāo)準(zhǔn)API接口,便于用戶根據(jù)自己的硬件設(shè)備開(kāi)發(fā)標(biāo)準(zhǔn)的設(shè)備驅(qū)動(dòng)。它是一個(gè)代碼量少、方便裁剪的提供語(yǔ)言接口的鏈接庫(kù)。圖1是基于VxWorks的WindML系統(tǒng)結(jié)構(gòu),它主要由SDK、DDK和硬件組成。其中SDK(SoftwareDevelopment Kit)是硬件無(wú)關(guān)層,它對(duì)用戶應(yīng)用程序提供統(tǒng)一的編程接口,包括圖形、視頻、音頻和事件驅(qū)動(dòng)服務(wù)器等,滿足用戶的基于事件驅(qū)動(dòng)的多媒體應(yīng)用的需要;DDK(DriverDevelopment Kit)是硬件相關(guān)層,即所謂的設(shè)備驅(qū)動(dòng)程序,它與用戶的硬設(shè)備相關(guān),一般應(yīng)由用戶根據(jù)具體硬件定制開(kāi)發(fā),它對(duì)硬件系統(tǒng)層輸出初始化信息、控制信息和用戶應(yīng)用程序的圖形人機(jī)接口,對(duì)SDK層提供設(shè)備無(wú)關(guān)的標(biāo)準(zhǔn)驅(qū)動(dòng)接口;硬件層一般由用戶定制,以實(shí)現(xiàn)相應(yīng)要求。


圖1 WindML系統(tǒng)結(jié)構(gòu)

3.2 WindML事件驅(qū)動(dòng)機(jī)制的設(shè)計(jì)思想

3.2.1 分層模塊化

WindML事件驅(qū)動(dòng)機(jī)制設(shè)計(jì)成幾個(gè)模塊,如I/O設(shè)備驅(qū)動(dòng)模塊、I/O子系統(tǒng)處理模塊、輸入監(jiān)測(cè)任務(wù)模塊、消息分發(fā)模塊等。在模塊內(nèi),又按功能劃分成更小的模塊。同時(shí),I/O設(shè)備驅(qū)動(dòng)與I/O子系統(tǒng)處理模塊嚴(yán)格處于系統(tǒng)的最下層,它用VxWorks系統(tǒng)的實(shí)時(shí)性設(shè)計(jì)來(lái)保證WindML事件的實(shí)時(shí)獲取,并且上層模塊可以不知道下層的實(shí)現(xiàn)細(xì)節(jié)。

3.2.2 任務(wù)隊(duì)列化

WindML應(yīng)用系統(tǒng)中,一定有很多任務(wù),因此,不管是系統(tǒng)任務(wù)或用戶任務(wù),都采用任務(wù)隊(duì)列方式管理本任務(wù)應(yīng)處理的事件,以保證事件的完整性和有效性。

3.2.3 低開(kāi)銷(xiāo)強(qiáng)實(shí)時(shí)性

為了減小模塊間的影響和保證強(qiáng)實(shí)時(shí)性,避免額外的拷貝操作,在實(shí)現(xiàn)中大量采用了指標(biāo)方式,特別是在I/O子系統(tǒng)和消息分發(fā)模塊中。

3.3 WindML事件驅(qū)動(dòng)機(jī)制的實(shí)現(xiàn)方案

WindML是一個(gè)基于事件驅(qū)動(dòng)的圖形庫(kù),它采用客戶/服務(wù)器模式,事件驅(qū)動(dòng)的原理如圖2。客戶應(yīng)用程序端負(fù)責(zé)窗口的繪制、窗口更新和其它用戶消息的響應(yīng),每一個(gè)窗體對(duì)象均建立一個(gè)消息隊(duì)列,用來(lái)接收服務(wù)器端的事件,從而進(jìn)行處理。服務(wù)器端主要由一個(gè)叫“輸入監(jiān)測(cè)任務(wù)”的任務(wù)來(lái)集中處理。輸入監(jiān)控任務(wù)依靠VxWorks I/O系統(tǒng)和select機(jī)制來(lái)采集I/O設(shè)備的實(shí)時(shí)事件,然后將其打包(或壓縮)成標(biāo)準(zhǔn)結(jié)構(gòu)的事件信息。打包后的信息通過(guò)uglEventPost函數(shù),發(fā)送到事件處理模塊中,在這個(gè)模塊中搜索應(yīng)用程序的所有窗口的所有消息隊(duì)列,判斷當(dāng)前事件應(yīng)該由哪一個(gè)窗口的消息隊(duì)列來(lái)接收,并將其發(fā)送到這個(gè)消息隊(duì)列中。這樣,這個(gè)客戶應(yīng)用程序就可以從消息隊(duì)列中取出消息信息,進(jìn)行相應(yīng)的處理。而且,這種分層模塊化機(jī)制也為用戶直接以事件方式在窗口間進(jìn)行通信提供了方便,只要調(diào)用uglEventPost函數(shù)即可,而不必經(jīng)過(guò)其它底層模塊。因此,在整個(gè)過(guò)程中,有幾部分的實(shí)現(xiàn)非常關(guān)鍵,包括I/O子系統(tǒng)與設(shè)備I/O驅(qū)動(dòng)、Select機(jī)制的實(shí)現(xiàn)方案、輸入監(jiān)測(cè)任務(wù)的實(shí)現(xiàn)機(jī)制、事件回調(diào)注冊(cè)與事件分發(fā)處理機(jī)制等。


圖2WindML 事件驅(qū)動(dòng)原理圖

3.3WindML 的使用

WindML 本身也具有可裁剪性和可配置性,以適應(yīng)不同的應(yīng)用要求。WindML 可以為在VxWorks 操作系統(tǒng)下開(kāi)發(fā)的軟件提供基本圖形、視頻和音頻文面的操作。WindML 適用于很多種CPU,可以提供獨(dú)立于硬件的代碼,同時(shí)它也支持鼠標(biāo)、鍵盤(pán)等輸入設(shè)備.WindML 的主要功能有二維圖形API,事件服務(wù),區(qū)域和窗口管理,多媒體,資源管理。

其中,二維圖形API 是最常用的部分,包括基本畫(huà)圖操作(畫(huà)線、矩形、橢圖、多邊形、點(diǎn)),選擇字體輸出文體,位圖,光標(biāo)管理,批量畫(huà)圖操作,圖形上下文,色彩管理,雙緩沖。事件服務(wù)程序是用來(lái)處理輸入設(shè)備的輸入請(qǐng)求的。它會(huì)把鍵盤(pán)、鼠標(biāo)等輸入的數(shù)據(jù)轉(zhuǎn)化為事件并且傳送給事件句柄,送到應(yīng)用隊(duì)列中。區(qū)域和窗口管理可以在界面上定義一個(gè)區(qū)域或多線程之間共享的窗口以供畫(huà)圖操作。多媒體API 支持NTSC,PAL,SECAM 等視頻制式,DSP 或混頻器兩種設(shè)備的音頻輸出,也支持JPEG 圖形格式。

WindML 的圖形界面是以像素為單位的,一般采用配色表來(lái)選擇顏色,先在配色表上配置好一種顏色的R、G、B 值,并用其在配色表中的索引值代表這種顏色。VxWorks 支持C 和C++。在WindML 的編程中,用C 和C++寫(xiě)的程序完全可以編譯通過(guò),但是C 語(yǔ)言中的printf()等函數(shù)是無(wú)法在圖形界面上輸出字符的,必須用WindML 提供的相應(yīng)函數(shù)才行。例如,uglTextDraw(ge,x1,y1,length,text)是在屏幕上(x1, y1)處用前面已設(shè)置的字體輸出英文字符串text。WindML 本身不支持中文,而在國(guó)內(nèi)的應(yīng)用場(chǎng)合,圖形界面中不能顯示中文往往是不符合要求的。這里可以用調(diào)用點(diǎn)陣字庫(kù)的辦法解決這樣的問(wèn)題。國(guó)家標(biāo)準(zhǔn)規(guī)定:漢字庫(kù)分94個(gè)區(qū),每個(gè)區(qū)有94 個(gè)漢字(以位作區(qū)別),每個(gè)漢字在漢字庫(kù)中有確定的區(qū)和位編號(hào)。每個(gè)漢字在庫(kù)中是以點(diǎn)陣字模型式存儲(chǔ)的,一般采用16×16 點(diǎn)陣(32 字節(jié))、24×24 點(diǎn)陣(72字節(jié)),每個(gè)點(diǎn)用一個(gè)二進(jìn)制位(0 或1)表示,地應(yīng)在屏幕上顯示出來(lái),就是相應(yīng)的漢字。

由于在中文環(huán)境下,輸入的是漢字的內(nèi)碼,我們必須將之轉(zhuǎn)換成區(qū)位碼,算出偏移量,從字庫(kù)中找到對(duì)應(yīng)的漢字,將其字模顯示即可。采用這種方法就需要有字庫(kù)文件,還必須自己寫(xiě)一個(gè)調(diào)用字庫(kù)顯示漢字的函數(shù)。這樣,在主程序中將需要顯示的漢字用引號(hào)表示成一個(gè)字符串,調(diào)用顯示漢字的函數(shù)即可。由于Tornado 中無(wú)法直接輸入中文,需要在其它的編輯器中(如UltraEdit)輸入漢字字符串保存后在Tornado 中打開(kāi)即可。

在圖形顯示前,必須先調(diào)用WindML 的API 函數(shù)UglInitialize()進(jìn)行初始化,然后還需要產(chǎn)生一個(gè)圖形環(huán)境,這樣才可以顯示自己的圖片。WindML 使用多線程和多任務(wù),但圖形的資源是一定的,為防止多線程之間產(chǎn)生資源沖突,需要使用互斥信號(hào)量鎖定資源。WindML 中,一般在使用一組畫(huà)圖函數(shù)前,用UglBatchStart(gc)通過(guò)互斥信號(hào)量鎖定圖形上下文、圖形設(shè)備及緩沖,并且隱藏光標(biāo)。在畫(huà)圖操作完成后,再用 UglBatchEnd(gc)釋放被鎖定資源以被其它的畫(huà)圖函數(shù)所使用。

4 結(jié)束語(yǔ)

該軟件的在VxWorks系統(tǒng)下的移植工作已基本實(shí)現(xiàn),圖形的顯示與瀏覽基本完成。不過(guò)現(xiàn)在顯示的圖形格式為JPEG,DDS格式圖形的顯示和軟件功能的完善正在進(jìn)行中。



與人玫瑰

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉