国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

雙緩沖技術(shù)在船舶監(jiān)控圖形界面開(kāi)發(fā)中的應(yīng)用

2019-01-07 08:01張麗蕓陳玉沖
關(guān)鍵詞:緩沖區(qū)機(jī)艙繪制

李 寬, 張麗蕓, 陳玉沖

(1. 上海船舶運(yùn)輸科學(xué)研究所 艦船自動(dòng)化系統(tǒng)事業(yè)部, 上海 200135;2. 渤海造船廠(chǎng)集團(tuán)設(shè)計(jì)院, 遼寧 葫蘆島 125004)

0 引 言

隨著航海事業(yè)的不斷發(fā)展,機(jī)艙監(jiān)控系統(tǒng)在提高船舶的自動(dòng)化水平、保證船舶安全航行等方面起著越來(lái)越重要的作用。隨著機(jī)艙自動(dòng)化程度的不斷提高,實(shí)時(shí)嵌入式操作系統(tǒng)VxWorks在現(xiàn)代機(jī)艙監(jiān)控系統(tǒng)中的應(yīng)用越來(lái)越廣泛。機(jī)艙監(jiān)控系統(tǒng)是由多種監(jiān)控設(shè)備組合而成的復(fù)雜的人機(jī)系統(tǒng),需機(jī)電人員對(duì)大量信息進(jìn)行快速處理,因此對(duì)人機(jī)交互界面的要求較高。機(jī)艙監(jiān)控系統(tǒng)需對(duì)機(jī)艙設(shè)備的參數(shù)、運(yùn)行狀態(tài)和故障報(bào)警等信息進(jìn)行顯示和操作,其圖形界面在滿(mǎn)足傳統(tǒng)圖形用戶(hù)界面方案要求的同時(shí),還應(yīng)具有很高的實(shí)時(shí)性和可擴(kuò)展性。美國(guó) WRS 公司開(kāi)發(fā)的媒體庫(kù)(Wind Media Library,WindML)滿(mǎn)足這些要求,且具有占用內(nèi)存少、可移植性強(qiáng)和高性能等特點(diǎn)。

1 開(kāi)發(fā)工具及圖形顯示原理

1.1 VxWorks系統(tǒng)和WindML開(kāi)發(fā)工具

VxWorks 是由美國(guó)風(fēng)河公司開(kāi)發(fā)的具有微內(nèi)核、高可靠性、高實(shí)時(shí)性和可裁減等特點(diǎn)的嵌入式實(shí)時(shí)操作系統(tǒng)。VxWorks 提供有圖形開(kāi)發(fā)組件WindML,在VxWorks一般的界面開(kāi)發(fā)應(yīng)用中,可使用WindML進(jìn)行圖形界面設(shè)計(jì)。WindML可為運(yùn)行在嵌入式系統(tǒng)上的多媒體應(yīng)用程序提供支持,能用來(lái)開(kāi)發(fā)可定制的標(biāo)準(zhǔn)化設(shè)備驅(qū)動(dòng)程序的框架。

WindML包含軟件開(kāi)發(fā)工具包(SDK)和驅(qū)動(dòng)開(kāi)發(fā)工具包(DDK)2個(gè)組件,其中:SDK用來(lái)實(shí)現(xiàn)應(yīng)用程序的開(kāi)發(fā);DDK用來(lái)實(shí)現(xiàn)驅(qū)動(dòng)程序的開(kāi)發(fā)。WindML能滿(mǎn)足嵌入式計(jì)算機(jī)的所有圖形要求,保證開(kāi)發(fā)人員在VxWorks實(shí)時(shí)操作系統(tǒng)上建造功能齊全、豐富多彩、可嵌入式的圖形界面。[1]

1.2 圖形顯示原理

圖形顯示由底層圖片、文字、數(shù)字和符號(hào)等共同組成,原理見(jiàn)圖1。

圖1 圖形顯示原理

WindML本身不支持漢字顯示,可通過(guò)調(diào)用點(diǎn)陣字庫(kù)等方法來(lái)解決該問(wèn)題。在中文環(huán)境下,輸入的是漢字的內(nèi)碼,若要顯示漢字,需進(jìn)行點(diǎn)陣尋址,找到該漢字內(nèi)碼的字模信息在漢字庫(kù)中的位置,取出該字模信息進(jìn)行點(diǎn)陣顯示。

WindML的圖形界面基于像素,用顏色匹配表說(shuō)明位圖中的顏色。首先在顏色匹配表上設(shè)置一種顏色的紅、綠、藍(lán)亮度值,然后用位圖陣列中的每個(gè)像素值索引值代表該點(diǎn)在顏色匹配表中的顏色。

在顯示圖形之前,須先調(diào)用WindML的API函數(shù)uglInitialize()進(jìn)行初始化,并產(chǎn)生一個(gè)圖形環(huán)境。在WindML中,一般會(huì)在使用一組畫(huà)圖函數(shù)之前用uglBatchStart()通過(guò)互斥信號(hào)量鎖定圖形上下文、圖形設(shè)備和緩沖,以防止多線(xiàn)程之間產(chǎn)生資源沖突。在畫(huà)圖操作完成之后,只有用 uglBatchEnd()釋放被鎖定的資源,其他畫(huà)圖函數(shù)才可使用。[2]

2 圖形開(kāi)發(fā)中遇到的問(wèn)題

在船舶監(jiān)控系統(tǒng)中,由于需實(shí)時(shí)采集、顯示機(jī)艙各設(shè)備的狀態(tài)和報(bào)警信息等,每次采集到數(shù)據(jù)和各界面互相切換時(shí)都要實(shí)時(shí)刷新畫(huà)面,而刷新時(shí)會(huì)出現(xiàn)畫(huà)面閃爍和劇烈抖動(dòng)等現(xiàn)象。

畫(huà)面閃爍的根本原因是相鄰兩幀圖像之間存在巨大的差異。當(dāng)需顯示新的圖形或使原來(lái)顯示的圖形發(fā)生變化時(shí),需刷新背景,用背景顏色的畫(huà)刷將背景重新刷一遍,原圖形將被覆蓋,此時(shí)畫(huà)上新圖形即可完成圖形的刷新顯示或動(dòng)態(tài)顯示。但是,由于背景顏色(一般是白色)與圖形顏色之間存在反差,在不斷地重復(fù)刷新、顯示的過(guò)程中會(huì)產(chǎn)生閃爍。閃爍本質(zhì)上就是反差,反差越大,閃爍越厲害。因此,當(dāng)窗口由于切換界面或數(shù)據(jù)更新需重繪時(shí),首先清除顯示區(qū)背景色,然后才調(diào)用OnPaint函數(shù)進(jìn)行重繪。背景色與繪圖內(nèi)容的反差經(jīng)常很大,導(dǎo)致背景色與顯示圖形在短時(shí)間內(nèi)反復(fù)切換,造成顯示窗口出現(xiàn)閃爍現(xiàn)象。

針對(duì)刷新時(shí)畫(huà)面經(jīng)常出現(xiàn)閃爍、抖動(dòng)現(xiàn)象的問(wèn)題,初期處理方式是以位圖背景的形式將圖形界面中的固定信息保存起來(lái),調(diào)用uglDefault—BitmapSet()來(lái)實(shí)現(xiàn),在該背景上動(dòng)態(tài)刷新變化的測(cè)點(diǎn)信息、報(bào)警等。在該方式下刷新畫(huà)面時(shí)數(shù)據(jù)量會(huì)減少,畫(huà)面的閃爍現(xiàn)象有所改善,但因采集到的監(jiān)測(cè)數(shù)據(jù)、設(shè)備的運(yùn)行狀態(tài)等是實(shí)時(shí)變化的[3],且圖形緩沖顯示方式不變,小頻率或少量的數(shù)據(jù)刷新依然會(huì)引起畫(huà)面閃爍、抖動(dòng)現(xiàn)象。

3 雙緩沖技術(shù)及其實(shí)現(xiàn)

傳統(tǒng)的繪圖方式是采用單緩沖技術(shù),而要解決圖形界面開(kāi)發(fā)過(guò)程中刷新圖像時(shí)遇到的閃爍、抖動(dòng)問(wèn)題,需依靠雙緩存方式下的雙緩沖圖形刷新技術(shù)來(lái)實(shí)現(xiàn)。

在系統(tǒng)中,所有設(shè)備都有一個(gè)被稱(chēng)為設(shè)備描述表的內(nèi)存緩沖區(qū)與其對(duì)應(yīng)。傳統(tǒng)的繪圖方式(單緩沖)是將圖形繪制在唯一的內(nèi)存緩沖區(qū)中,由圖形設(shè)備接口自動(dòng)將內(nèi)存緩沖區(qū)中的圖像復(fù)制到顯存中顯示。雙緩沖圖形刷新技術(shù)在內(nèi)存中有2片緩存區(qū),分別為前端緩沖區(qū)和預(yù)先使用函數(shù)uglPageDrawSet( )手動(dòng)建立的與前端緩沖區(qū)兼容的后端緩沖區(qū)。在繪圖過(guò)程中,首先將下一幀要顯示的圖像繪制到后端緩沖區(qū),然后將后端緩沖區(qū)中的圖像復(fù)制到前端緩沖區(qū),最后由圖形設(shè)備接口自動(dòng)將前端緩沖區(qū)中待顯示的圖像復(fù)制到顯存中,完成圖形顯示。

單緩沖技術(shù)和雙緩沖技術(shù)基本原理見(jiàn)圖2。

a) 單緩沖技術(shù)b) 雙緩沖技術(shù)

圖2單緩沖技術(shù)和雙緩沖技術(shù)基本原理

在圖形界面開(kāi)發(fā)過(guò)程中,在同一圖形界面背景下,背景圖、標(biāo)題欄、單位和量程等圖像內(nèi)容不變,需不斷進(jìn)行更新的只有實(shí)時(shí)監(jiān)測(cè)的數(shù)據(jù)。結(jié)合前述雙緩沖技術(shù),可首先將固定不變的內(nèi)容在不可見(jiàn)的后臺(tái)屏幕上分層繪制,然后將其他各層的內(nèi)容透明粘貼到背景層的相應(yīng)位置上,最后再將其復(fù)制到屏幕顯示區(qū)域進(jìn)行顯示。由于固定不變的圖層無(wú)需重復(fù)繪制,因此可加快界面刷新速度。

3.1 WindML雙緩沖驅(qū)動(dòng)程序配置

1) 使用pentiumM 系列主板搭建硬件環(huán)境,并準(zhǔn)備好VxWorks5.5.1 + WindML3.0 的軟件調(diào)試環(huán)境;

2) 新建一個(gè) bootable 類(lèi)型的 VxWorks 工程;

3) 將 gmch.o 庫(kù)文件添加到創(chuàng)建的工程路徑下;

4) 將 windML_INTEL_GMCH_DB.cfg 文件放置在C:Tornado221host esourcewindMLconfigdatabase 路徑下(本文假設(shè)VxWorks 開(kāi)發(fā)環(huán)境安裝在 C:Tornado221 路徑下);

5) 將 gmchcfg.h 文件放置在C:Tornado221 argethugldrivergraphicsintel 路徑下(本文假設(shè). VxWorks 開(kāi)發(fā)環(huán)境安裝在 C:Tornado221 路徑下);

6) 對(duì) WindML3.0 進(jìn)行配置(見(jiàn)圖3)。

圖3 WindML3.0配置界面

圖4 雙緩沖流程圖

3.2 雙緩沖技術(shù)實(shí)現(xiàn)方法

在具體實(shí)現(xiàn)中,首先創(chuàng)建前后雙緩沖頁(yè), 調(diào)用uglPageDrawSet ( )函數(shù)設(shè)置活動(dòng)的雙緩沖頁(yè),使監(jiān)測(cè)數(shù)據(jù)、設(shè)備狀態(tài)和報(bào)警等過(guò)程在Off_Screen(后臺(tái))實(shí)現(xiàn)。在繪制當(dāng)前數(shù)據(jù)信息時(shí),調(diào)用函數(shù)uglPageDrawSet( )另外指定繪制下一圖形操作的頁(yè)面(緩沖)。在繪制完成之后,通過(guò) uglPagevisableSet( )將后臺(tái)的圖像拷貝到前臺(tái),實(shí)現(xiàn)雙緩沖圖形的界面切換。雙緩沖流程圖見(jiàn)圖4。

部分實(shí)現(xiàn)代碼如下:

dispPage[0] = UGL_PAGE_ZERO_ID;

dispPage[1] = uglPageCreate(devId);//創(chuàng)建雙緩沖頁(yè)

uglPageDrawSet(devId, dispPage[1]);//設(shè)置活動(dòng)頁(yè)

sprintf(pageName, "%s%d%s","/ata0a/rPage",fileNumber,".jpg");

uglJpegToDDBFromFile (jpegId, pageFile, &jpegDdbPageId, UGL_NULL, 0, 0);

uglBitmapSizeGet(jpegDdbPageId, &jpegWidth1, &jpegHeight1);//圖片加載

uglTextDraw(gc, dispAna[i].xPoint, dispAna[i].yPoint, -1, LDMDispAna[i]);//字符顯示

uglTextDrawW(gc, dispAna[i].xPoint, dispAna[i].yPoint, dispAna[i].dispLen, (UGL_WCHAR *)dispAna[i].dispName[dispAna[i].value] );//漢字顯示

uglBitmapBlt(gc, jpegDdbPageId, 0, 0, jpegWidth1 - 1, jpegHeight1 - 1, UGL_DEFAULT_ID, 0, 0);//位圖繪制

if(pageIndex == 1)

{

uglPageVisibleSet(devId, dispPage[1]);

uglPageDrawSet(devId, dispPage[0]);

pageIndex = 0;

}

else

{

uglPageVisibleSet(devId, dispPage[0]);

uglPageDrawSet(devId, dispPage[1]);

pageIndex = 1;

}//雙緩沖界面切換

3.3 效果

由于采用雙緩沖技術(shù)時(shí)需在內(nèi)存中新建一個(gè)臨時(shí)緩存區(qū),因此新建一個(gè)臨時(shí)位圖對(duì)象作為畫(huà)布并綁定臨時(shí)緩存區(qū)。繪圖在該緩存區(qū)中進(jìn)行,當(dāng)所有圖形繪制完成之后,將臨時(shí)緩存區(qū)中的位圖對(duì)象貼到顯示緩存區(qū)中,由于內(nèi)存中的圖形與屏幕顯示的圖形差別很小,可消除刷新屏幕時(shí)出現(xiàn)的閃爍、抖動(dòng)現(xiàn)象。

顯示單元監(jiān)控界面效果見(jiàn)圖5。

圖5 顯示單元監(jiān)控界面效果

4 結(jié) 語(yǔ)

隨著監(jiān)控系統(tǒng)技術(shù)的不斷發(fā)展,對(duì)監(jiān)控系統(tǒng)實(shí)用性、可靠性和安全性的要求會(huì)越來(lái)越高,惡劣環(huán)境下的機(jī)艙圖形界面開(kāi)發(fā)技術(shù)將是今后一段時(shí)期的發(fā)展重點(diǎn)。本文對(duì)VxWorks圖形顯示原理、閃屏分析、雙緩沖技術(shù)及具體應(yīng)用進(jìn)行介紹,VxWorks提供的多媒體組件WindML雙緩沖技術(shù)已成功應(yīng)用于實(shí)際工程開(kāi)發(fā)中,取得了良好的效果。

猜你喜歡
緩沖區(qū)機(jī)艙繪制
船舶機(jī)艙火災(zāi)的原因分析及預(yù)防
船用柴油機(jī)的選型和動(dòng)力系統(tǒng)機(jī)艙布置優(yōu)化
繪制童話(huà)
船舶機(jī)艙通風(fēng)相關(guān)要求及常見(jiàn)關(guān)閉裝置分析
作品賞析
船舶機(jī)艙常見(jiàn)消防隱患及防控
繪制世界地圖
緩沖區(qū)溢出漏洞攻擊及其對(duì)策探析
神秘的不速之客
初涉緩沖區(qū)