999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于WindML的圖形界面控制系統設計*

2014-07-25 11:28:23
艦船電子工程 2014年5期
關鍵詞:頁面設計

(東北電子技術研究所 錦州 121000)

基于WindML的圖形界面控制系統設計*

蒲元遠吉高卿

(東北電子技術研究所 錦州 121000)

論文結合實際項目介紹了WindML軟件架構,如何安裝、配置和使用WindML,在應用程序開發圖形界面軟件的流程,如何進行多頁軟件設計,WindML中的雙緩沖技術,漢字的顯示以及幫組頁面的制作,并給出了程序運行的相應結果。

VxWorks;WindML雙緩沖;漢字顯示;多頁顯示;軟件架構

ClassNumberTN97

1 引言

VxWorks作為性能優秀的嵌入式實時操作系統,不論在可靠性、實時性、可裁減性方面,還是在開放性、易用性等方面都是相當不錯的。目前,嵌入式實時操作系統VxWorks以其良好的可靠性和卓越的實時性被廣泛地應用在國防、航空和航天等領域中。VxWorks圖形開發組件WIND MEDIA LIBRARY是一個適用于VxWorks下開發圖形用戶界面的媒體庫,它提供了一系列的API函數,功能強大,易于實現圖形用戶界面的開發。本文就圖形界面控制系統、WindML、應用程序設計等,作進一步的研究和探討[1]。

2 圖形界面控制系統

本系統由主顯控制器、從顯控制器以及分配器構成,如圖1所示。主顯控制器硬件由CPU模塊、接口模塊和人機交付模塊(顯示屏幕、鍵盤)組成,它通過CPU模塊自帶的網口接收上級的控制、氣象等數據,通過接口模塊接收分配器上報的信息以及與分顯控制器通信;主顯控制器和從顯控制器都使用了WindML設計,通過鍵盤進行頁面切換、輸入數據等,通過WindML圖形開發在屏幕上顯示信息[2]。

圖1 圖形界面控制系統構成圖

3 WindML

3.1 圖形驅動架構

WindML圖形驅動主要通過以下三層進行通信:2D層、板級支持包及操作系統和圖形設備。體系結構如圖2所示[3]。

圖2 圖形驅動體系結構

2D層與圖形驅動程序通過UGL圖形接口結構(ugl_ugi_driver結構)進行通信,ugl_ugi_driver結構在install-Dir/target/h/ugl/uglugi.h中定義。[2]圖形驅動程序通過硬件提取API與操作系統通信,硬件提取API提供了允許圖形驅動保留獨立于母板和CPU的接口。一般包含幾個可擴展的寄存器作為圖形加速器,可加速的操作有線條、填充、顏色擴充和光標。

3.2 安裝使用步驟

本項目使用WindRiver的WindML3.0版本,集成在Tornado2.2.1上;配置好BSP包后,選擇配置WindML。如圖3所示,需要選擇所對應的CPU平臺,圖形像素的大小,刷新率,是否需要鼠標、鍵盤,最后在Bitmap Fonts頁中選擇需要添加的漢字。

4 應用程序設計

4.1 應用程序開發流程

用WindML API進行繪圖操作的一般步驟:1)程序初始化,調用uglInitialize;2)設備驅動裝載(uglRegistryFind),包括顯示、字體、事件處理、框架等;3)獲取ugl信息;4)創建圖形設備gc;5)設置字體;6)分配圖形空間,以及創建位圖;7)使用WindML的API函數輸出字符,像素描點等。流程如圖4所示[4]。

圖4 使用WindML進行應用程序開發的流程

在本項目中,使用了基于VxWorks的實時多任務設計,顯示主處理函數為專用的任務,它為循環不斷接收其他任務給顯示任務傳輸的消息,對消息進行解析刷新顯示。根據不同的消息顯示不同的頁面和每頁中的內容。應用程序框架代碼如下:

UGL_FOREVER{

if(ERROR!=(msgQReceive(QueueDisplay,msgBuffer,MESSAGE_MAX_LENGTH,WAIT_FOREVER))){

msg=msgBuffer;

switch(*msg){

case H_SYSCONTROL:

SysToDraw(msg);

break;

case Cycle_Queue_ID:

CycleToDraw(msg);

break;

default:break;

} } }

4.2 多頁設計

為了使圖形控制系統功能顯示細化,操作更清晰,本項目圖形控制系統采用頁面擦除的方法來實現頁面的多級顯示。鍵盤設計為中斷方式,根據鍵盤輸入,顯示需要的頁面及信息。多頁選擇見圖4,選擇后進入的主態勢頁面見圖5,也可以從主態勢頁面返回到選擇頁面,本項目多頁設計的層級化。主體代碼如下[5]:

intConnect(INUM_TO_IVEC(INT_VEC_GET(KBD_INT_LVL)),(VOIDFUNCPTR)IntKeyProg,0))//連接中斷服務程序

sysIntDisablePIC(KBD_INT_LVL);//關鍵盤中斷

KeyValue[0]=sysInByte(COMMAND_8042);//讀取鍵盤值

switch(KeyValue[0]){ //根據鍵盤值切換

case 0x1c:/** 回車 **/

KeyValue[1]=Key_Enter;

break;

case 0x0c:/** - **/

KeyValue[1]=Key_Minus;

break;

……

default:break;}

sysIntEnablePIC(KBD_INT_LVL);//開鍵盤中斷

圖5 圖形控制系統多頁設計效果圖

圖6 圖形控制系統多頁設計效果圖

4.3 雙緩存技術

本項目中的圖形控制系統采用了雙緩沖技術,它不改變可見視頻緩存區起始地址,而是在內存中開辟一塊與屏幕一樣大小的存儲區域,作為緩沖屏幕,同時將下一幀要顯示的圖像繪制到這個緩沖屏幕上面,在顯示的時候將虛擬屏幕中的數據直接復制到可見視頻緩存區里。由于圖形繪制過程是在不可見的虛擬屏幕中進行,所以可以消除屏幕的閃爍、抖動。主體代碼如下[6]:

page[0]= UGL_PAGE_ZERO_ID;

page[0]= uglPageCreate(devId);

page[1]= uglPageCreate(devId);

uglPageDrawSet (devId, page[1]);

if (pageIndex == 0){

uglPageVisibleSet(devId, page[1]);

uglPageDrawSet(devId, page[0]);

pageIndex = 1;}

else {

uglPageVisibleSet(devId, page[0]);

uglPageDrawSet(devId, page[1]);

pageIndex = 0;}

4.4 如何顯示漢字

在圖形方式下,要顯示漢字,必須要有漢字字模,并通過適當的轉換公式,將漢字編碼轉換為字模在字庫中的位移,然后選用讀寫指令實現字模的讀取和顯示。可以通過兩種方法輸出漢字,第一種是進行二次開發以支持漢字的顯示,讀取字庫文件,使用uglPixelSet屏幕點函數輸出漢字;第二種是編輯VxWorks自帶的bmf字庫文件,通過WindML的支持,然后在程序中直接調用uglTextDrawW()顯示漢字。本項目采用后一種方式,實際使用步驟如下[7]:

1)修改bmf字庫文件。在$BASEDIR argetsrcuglfontsmf,找到需修改的bmf文件uflbr18.c,其中第一行注釋/* uflbr18.c - Lucida_Sans_Bold_18 font for BMF font driver */ ,“—”后面的“Lucida_Sans_Bold_18”將由WindML Configuration解釋為“Lucida_Sans_Bold_18”字體。配置圖見圖2。

2)修改漢字字體。uflbr18.c中,會看到如下格式的漢字信息,可以編輯我們所需要的漢字。其中index和page的值可在UltraEdit直接得到。然后設置長寬為16X16,最后32個字節可以通過取模工具(字模3增強版)獲得。

/********導************/

181, /* index */

188, /* page */

0, /* size (MSB)*/

36, /* size (LSB)*/

16, /* width */

16, /* height */

16, /* ascent */

0x04, 0x00, 0x04, 0x00, 0x04, 0x7e, 0x04, 0x92, 0x14, 0x92, 0x24, 0x92, 0x04, 0x92, 0x04, 0x92, 0x44, 0x92, 0x84, 0x92, 0x7f, 0x92, 0x04, 0xbf, 0x04, 0x82, 0x06, 0xe0, 0x04, 0x00, 0x00, 0x00

3)在應用程序中使用。在應用程序中使用漢字,需要如下幾個步驟:

(1)uglFontFindString(fontDrvId, "familyName=Lucida;pixelSize=18", &fontoilDef);//找到對應文件

(2)font_oil = uglFontCreate(fontDrvId, &fontoilDef);//創建字體

(3)uglForegroundColorSet(gc, colorTable[DARKGRAY].uglColor);//設置顏色

(4)uglFontSet(gc, font_oil);//設置字體

(5)uglTextDrawW(gc, InfoTopPosX,InfoTopPosY,-1, "綜");//輸出漢字

uglTextDrawW(gc, InfoTopPosX,InfoTopPosY+Pix24,-1, "合");

4.5 如何顯示圖片

圖像數據是位圖矩陣的像素的顏色信息,圖像數據的存儲格式和含義,因表示像素顏色的位數不同而不同,對于沒有壓縮的圖像數據,當用1位表示一個像素顏色。同樣可以使用uglPixelSet屏幕點顯示函數顯示圖片。可以用取模工具,取出其數組,主體代碼如下[8]:

for(kk=0;kk<64*8;kk++){

for(jj=0;jj<8;jj++){

if(Bmp_boat[kk]&temp_bit){

uglPixelSet(gc,x+(kk%8)*8+jj,y+kk/8,colorTable[YELLOW].uglColor);

}

else {

uglPixelSet(gc,x+(kk%8)*8+jj,y+kk/8,colorTable[BLACK].uglColor);

}

temp_bit=temp_bit>>1;

}

temp_bit=0x80;

}

通過這種像素打點的方法,可以顯示任何內容的點陣圖片。

4.6 幫助界面,如何顯示字符串

本項目中的圖形控制系統需要制作幫助文檔。通過讀取固定格式的bin文件,將讀取的字符逐個畫在界面上,并且計算字符的高度和寬度;如果bin文件過大,可設計成多個屏幕顯示,并通過輸入鍵盤切換顯示的幫助頁面。幫助頁面效果如圖6所示[9]。

圖7 圖形控制系統幫主頁面效果圖

cd("/ata0a/");//創建磁盤格式

UVHandle=open("/ata0a/help.bin",O_CREAT|O_RDWR,0);//打開len=lseek(UVHandle,0,SEEK_END);

read(UVHandle,HpBuffer,len);

//以下逐個顯示字符

for(i=0;i

uglTextDraw(gc,10,displayHeight/5+15*i,PageArrow,strBuf);

//此處可以使用uglTextDrawW顯示漢字

strBuf+=PageArrow;}

close(UVHandle);

ioctl(UVHandle,FIOFLUSH,0);

5 結語

本文介紹了WindML軟件架構,安裝、配置WindML,結合項目開發實際,詳細闡述了圖形界面控制系統中所使用到的設計原理,所開發的圖形控制系統已成功運用于某型號艦船的子系統控制中樞,界面美觀,運行穩定,達到了預期設計的目的。按照這些設計原理,也開發出其他型號的顯示控制器[10]。

[1]楊娟,王子勇,等.基于WindML的S3C2440顯示驅動設計[J].硅谷,2011(9).

[2]陳君,唐秀.VxWork下圖形用戶界面開發中雙緩沖技術應用[J].微計算機信息,2006(8).

[3]司江英,徐博寧,等.VxWorks系統下的漢字顯示[J].科技信息,2009(2).

[4]WindML SDK 3.0 Programmer’s guide[Z]. Wind River Systems,Inc.,2002.

[5]查振羽,熊華鋼.基于VxWorks實時控制系統中文交互界面開發平臺[J].計算機工程與設計,2009(8).

[6]趙漫菲,王光輝.基于嵌入式操作系統VxWorks的多級界面開發[J].計算機工程與設計,2005(10).

[7]陳君,唐秀明.VxWork下圖形用戶界面開發中雙緩沖技術應用[J].微計算機信息,2006(8).

[8]何江水,高有行.VxWorks漢字的顯示支持[J].微計算機信息,2005(5).

[9]孔祥營,張保山,俞烈彬.VxWorks驅動及分布式編程[M].北京:中國電力出版社,2007.

[10]周祖洋,傅建剛,萬洋.Windows下的位圖在VxWorks中大字顯示的實現[J].應用科技,2005(7).

DesignofGraphicsControlSystemBasedonWindML

PU Yuanyuan JI Gaoqing

(Northeast Research Institute of Electronics Technology, Jinzhou 121000)

According to the actual project experience, the architecture of WindML, how to setup, configure and use WindML develop environment, and the steps of develop graphics software in applications, how to develop Multi-page applications,how to use Double Buffering, Chinese character show and make helping page are introduced. At last, the results of the program running are given.

VxWorks, WindML, double buffering, chinese character show, multi-page show, software architecture

2013年11月10日,

:2013年12月23日

蒲元遠,男,工程師,研究方向:主要從事計算機軟件及應用。

TN97DOI:10.3969/j.issn1672-9730.2014.05.024

猜你喜歡
頁面設計
微信群聊總是找不到,打開這個開關就好了
大狗熊在睡覺
刷新生活的頁面
保健醫苑(2022年1期)2022-08-30 08:39:14
何為設計的守護之道?
現代裝飾(2020年7期)2020-07-27 01:27:42
《豐收的喜悅展示設計》
流行色(2020年1期)2020-04-28 11:16:38
瞞天過海——仿生設計萌到家
藝術啟蒙(2018年7期)2018-08-23 09:14:18
設計秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設計叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
同一Word文檔 縱橫頁面并存
淺析ASP.NET頁面導航技術
主站蜘蛛池模板: 日韩AV无码免费一二三区| 国产精品香蕉| 欧美日韩激情| 国产精品毛片在线直播完整版 | 国产精品美女自慰喷水| 91精品人妻一区二区| 中文字幕永久在线看| 91口爆吞精国产对白第三集| 欧美精品成人| 国产一级小视频| 黄色不卡视频| 日本欧美在线观看| 欧美一级高清片欧美国产欧美| 波多野结衣亚洲一区| 亚洲欧洲国产成人综合不卡| 成人午夜网址| 亚洲成综合人影院在院播放| 久久夜色撩人精品国产| 在线亚洲精品福利网址导航| 日本在线免费网站| 成人免费午夜视频| 区国产精品搜索视频| 国产精品专区第1页| 夜夜操天天摸| 日韩精品毛片人妻AV不卡| 国产成人综合久久精品尤物| 77777亚洲午夜久久多人| 国产成人综合亚洲网址| 久久综合成人| 亚洲国产综合精品中文第一| 精品無碼一區在線觀看 | 亚洲综合亚洲国产尤物| 国产精品久久久久鬼色| 国产凹凸视频在线观看| 国产欧美中文字幕| 色妞www精品视频一级下载| 成人午夜福利视频| 亚洲大尺码专区影院| 国产成人h在线观看网站站| 欧美亚洲第一页| 国产高清色视频免费看的网址| 国模私拍一区二区三区| 国产午夜福利亚洲第一| 亚洲中久无码永久在线观看软件| 久草视频福利在线观看 | 99久久精品免费观看国产| 亚洲精品免费网站| 日本国产在线| 女同国产精品一区二区| 国产成人精品午夜视频'| 欧洲欧美人成免费全部视频| 四虎影视国产精品| 国产乱子伦手机在线| 色网站免费在线观看| 欧美区日韩区| 日本少妇又色又爽又高潮| 亚洲欧美日韩中文字幕在线| 日韩无码一二三区| 亚洲swag精品自拍一区| 欧美成人精品在线| 婷婷五月在线视频| 亚洲欧美一区二区三区蜜芽| 2022国产无码在线| 91欧美亚洲国产五月天| 精品一区二区久久久久网站| 亚洲一区黄色| 欧美日本在线播放| 四虎影视永久在线精品| 999国产精品永久免费视频精品久久 | 国产精品久久久精品三级| 99尹人香蕉国产免费天天拍| 久久国产精品嫖妓| 国产www网站| 一级做a爰片久久毛片毛片| 综合人妻久久一区二区精品 | 亚洲天堂网2014| 成人福利在线免费观看| 18禁不卡免费网站| 国产在线观看精品| 99无码熟妇丰满人妻啪啪| 国产粉嫩粉嫩的18在线播放91| 国产精品视频猛进猛出|