當前位置:首頁 > 嵌入式 > 嵌入式教程
[導讀]基于MiniGUI的數(shù)字加密電話系統(tǒng)GUI設計

摘要:提出一種以AT91SAM9263處理器為核心芯片、采用嵌入式Linux2.6內(nèi)核和MiniGUI3.0圖形系統(tǒng)的數(shù)字加密電話系統(tǒng)GUI的設計與實現(xiàn)方案。采用雙緩沖技術(shù)與多張圖片交替顯示的方式解決了MiniGUI的動畫抖動問題和屏幕刷新負載過大導致的屏幕抖動問題。
關(guān)鍵詞:動畫抖動;雙緩沖技術(shù);MiniGUI;嵌入式

引言
    在需要豐富人機交互信息的嵌入式系統(tǒng)應用中,高精度的動態(tài)圖像顯示非常重要。因此,嵌入式系統(tǒng)對GUI的實時性和穩(wěn)定性的要求也越來越明顯。但是,動態(tài)圖像的抖動和刷新延遲的問題在嵌入式系統(tǒng)中經(jīng)常出現(xiàn),影響系統(tǒng)的顯示效果。
    國產(chǎn)圖形用戶界面系統(tǒng)MiniGUI提供完備的多窗口機制和類Win32消息傳遞機制,便于實現(xiàn)多個進程間的消息傳遞。而且具有占用內(nèi)存少、可移植性好等特點,因此在嵌入式領域中被廣泛應用。但在實際應用中,筆者發(fā)現(xiàn)了兩個問題:一是用MiniGUI的animation控件實現(xiàn)時出現(xiàn)動畫抖動,二是顯示較多圖片的窗口刷新時屏幕閃爍,嚴重影響屏幕的顯示效果。為解決以上兩個問題,本系統(tǒng)采用MiniGUI的雙緩沖技術(shù)和多張圖片交替顯示的方法,并通過實際應用證明了該方法的有效性。

1 數(shù)字加密電話系統(tǒng)架構(gòu)
1.1 硬件系統(tǒng)
    數(shù)字加密電話硬件系統(tǒng)的芯片采用ATMEL公司的AT91SAM9263處理器。主頻為200 MHz,2 MB高速Data Flash、64 MB NAND Flash和64 MB SDRAM。核心板的對外接口包括鍵盤接口、LCD接口、LED接口、MODEM模塊、電話機模塊和接口、SD卡接口和USB主從接口等。如圖1所示。


1.2 軟件系統(tǒng)
    操作系統(tǒng):開放源碼的Linux操作系統(tǒng)是開發(fā)嵌入式產(chǎn)品的首選。本系統(tǒng)采用開放源碼的嵌入式Linux系統(tǒng)。它的內(nèi)核版本為2.6.22,是基于default_at91sam9263_config配置的。
    交叉編譯工具鏈:采用arm-linux-XXX。arm-linux-gcc用于交叉編譯源程序,生成執(zhí)行文件;arm-linux-strip用于去掉執(zhí)行文件中的調(diào)試信息,起到減小執(zhí)行文件大小的作用。
    GUI系統(tǒng):MiniGUI是國產(chǎn)的一款面向嵌入式系統(tǒng)、跨操作系統(tǒng)的輕量級國產(chǎn)高級窗口系統(tǒng)(Windowing System)和圖形用戶界面(Graphi-cal User Interface,GUI)支持系統(tǒng)。經(jīng)過10余年的發(fā)展,MiniGUI已經(jīng)發(fā)展成為比較成熟、性能優(yōu)良且功能豐富的跨操作系統(tǒng)的嵌入式圖形界面支持系統(tǒng)。MiniGUI可在Linux/μClinux、eCos、μC/OS-II、VxWorks、pSOS、ThreadX等操作系統(tǒng)以及Win32平臺上運行,已廣泛應用于手持信息終端、機頂盒、工業(yè)控制系統(tǒng)、便攜式多媒體播放器等產(chǎn)品中。
    MiniGUI支持BMP、GIF、PNG、JPEG、PCX、TGA等常見圖像文件和位圖、圖標、光標等Windows資源文件,支持多字符集和多種字體,庫文件較小且可配置。MiniGUI3.0比其之前的版本,在以下幾方面有新的發(fā)展:
    ①主窗口雙緩沖技術(shù),可以在自定義緩沖區(qū)中獲得整個窗口的渲染結(jié)果。
    ②外觀渲染器技術(shù),外觀渲染器提供了多種風格的主窗口和控件界面外觀,并且應用程序可在幾種風格之間動態(tài)切換。
    ③雙向文本顯示與輸入,增加了對阿拉伯文和希伯來文語言的支持,實現(xiàn)了文本的變形和重排,并提供了阿拉伯文和希伯來文鍵盤的支持。
    ④支持不規(guī)則窗口,如圓角矩形、非矩形窗口等。
    ⑤增加了組件mGUtilis,該組件為用戶提供了一些常用的對話框模板,便于代碼復用。
    ⑥增加了組件msgplus,該組件是對MiniGUI圖形繪制接口的一個擴充和增強,主要提供對二維矢量圖形和高級圖形算法的支持。
    因此,MiniGUI非常適合編寫嵌入式圖形用戶界面應用程序。[!--empirenews.page--]
1.3 用戶界面設計
    數(shù)字加密電話系統(tǒng)需要顯示當前的系統(tǒng)狀態(tài)和具體內(nèi)容,以此進行系統(tǒng)與用戶之間的信息交流,因此對界面的穩(wěn)定性和實時性要求較高。本系統(tǒng)將整個屏幕分為3個區(qū)域,即狀態(tài)區(qū)域、Logo與時間顯示區(qū)域和主顯示區(qū)域,如圖2所示。狀態(tài)顯示區(qū)主要表示當前系統(tǒng)的工作狀
態(tài)和設備的狀態(tài)。比如是掛機態(tài)還是摘機態(tài),是加密還是非加密態(tài),是否插入U盤,當前的數(shù)據(jù)傳輸率為多少等。不同的狀態(tài)需要用不同的圖片來顯示。從一個狀態(tài)過渡到另一個狀態(tài),需要用一個動畫來表示。主顯示區(qū)域主要顯示表示當前系統(tǒng)的工作情況的動畫或文字提示。比如表示普通語音電話的動畫、表示正在加密傳輸?shù)膭赢嫞部梢燥@示其他信息,如系統(tǒng)功能選擇界面、選文件界面、日志管理界面等。Logo及時間顯示區(qū)顯示公司的Logo與當前系統(tǒng)時間。對于本系統(tǒng)的界面設計來說,最重要的是各種動畫的顯示要流暢。



2 實現(xiàn)GUI時存在的兩個問題
    本系統(tǒng)GUI的實現(xiàn)問題主要是各種圖片的顯示、動畫和選擇功能界面的實現(xiàn)。圖片的顯示方法很簡單,因此,在下面只介紹動畫和選擇功能界面的實現(xiàn)方法及存在的問題。
2.1 動畫的實現(xiàn)方法及存在的問題
    MiniGUI為實現(xiàn)動畫,已提供了animation控件,用animation控件實現(xiàn)動畫的過程非常簡單:
    ①準備動畫文件,文件格式應該是GIF格式,GIF格式的動畫文件可以用Flash和PhotoShop生成。
    ②用函數(shù)CreateAnimationFromGIF89aFile()讀入GIF文件。
    ③用CreateWindow()創(chuàng)建動畫顯示窗口。
    ④用SendMessage()函數(shù)控制動畫,該函數(shù)的第2個參數(shù)為ANM_STARTPLAY表示啟動動畫,參數(shù)為ANM_PLAYSTOP表示暫停動畫。也可以用函數(shù)SendMessage(GetDlgItem(hInitface,IDC_MAINANIMATION),ANM_SETANIMATION,0,(LPARAM)anim)實現(xiàn)更換動畫文件。但是,在嵌入式環(huán)境下,使用該方法播放動畫時,在狀態(tài)顯示區(qū)和主顯示區(qū)內(nèi)都產(chǎn)生嚴重的抖動現(xiàn)象。而且屏幕越大抖動就越明顯,分辨率為480×640時的抖動現(xiàn)象比240×320時更明顯。減少動畫的幀數(shù)或延長每一幀的播放時間,抖動仍然存在,嚴重影響屏幕的顯示效果。
2.2 功能選擇界面的實現(xiàn)及存在的問題
    功能選擇界面一般由多個圖片來組成,各表示不同的系統(tǒng)功能,用上下左右鍵選擇不同的功能,按Enter鍵運行相應程序,即打開另一個窗口,完成相應功能。當關(guān)閉窗口時重新顯示功能顯示界面。為區(qū)別被選中功能和未選中功能,放大或下沉顯示當前被選中的功能圖片,而前一個被選中功能圖片恢復成原來的大小,如圖3所示。每次用上下左右鍵選擇功能時和關(guān)閉功能窗口時,都要重新刷新背景,并重繪窗口客戶區(qū)的各個圖片。因為MiniGUI不保存被覆蓋區(qū)域的內(nèi)容,因此在MSG_PAINT消息中需要重繪的內(nèi)容較多,重繪圖片的常用方法是用FillB-oxWithBitmap()函數(shù)填充相應圖片區(qū)域,但是這種方法加重了屏幕刷新負載,引起屏幕明顯地閃爍。

[!--empirenews.page--]

3 關(guān)鍵問題的解決方法
3.1 動畫抖動問題的解決
    產(chǎn)生動畫抖動的主要原因是,用animation控件實現(xiàn)動畫時,頻繁地產(chǎn)生MSG_PAINT消息,加重了屏幕刷新的請求。MiniGUI通過判斷窗口是否含有無效區(qū)域來確定是否需要重繪窗口。如果需要重繪就向應用程序發(fā)送MSG_PAINT消息。窗口的重繪任務需由應用程序自己完成,因為MiniGUI不保存被覆蓋區(qū)域的內(nèi)容。MiniGUI的窗口在響應MSG_PAINT消息的時候進行復雜的圖形處理,尤其是在刷新時,對圖像的擦除和重寫造成了圖像顏色的反差。當繪圖消息的響應很頻繁時,這種反差也就越發(fā)明顯,于是我們就看到了動畫抖動的現(xiàn)象。為了解決動畫抖動的問題,系統(tǒng)采用了雙緩沖技術(shù)和多個圖片交替顯示的方法。并在實際應用中證明了該方法是行之有效的。雙緩沖技術(shù)要比直接操作顯存速度更快,因此可以解決抖動現(xiàn)象。
    采用雙緩沖技術(shù)實現(xiàn)動畫的基本思路是這樣的,首先在系統(tǒng)內(nèi)存中建立一個類似顯示內(nèi)存的內(nèi)存設備上行文,然后將待顯示圖片填充到該內(nèi)存設備上行文中,最后再通過位拷貝方式復制到顯示內(nèi)存中。為了達到動畫的效果,將多個圖片循環(huán)顯示,即設定定時器和靜態(tài)變量,每當定時器觸發(fā)時,根據(jù)靜態(tài)變量的值顯示不同的圖片,靜態(tài)變量由0到MAX循環(huán)。實現(xiàn)動畫的詳細流程如圖4所示。定時器的時間間隔和圖片的數(shù)量可以根據(jù)具體情況任意調(diào)整。本系統(tǒng)的主顯示區(qū)動畫采用這種方法實現(xiàn)后,動畫效果流暢,不再有抖動現(xiàn)象。


3.2 功能選擇界面閃爍問題的解決
    功能選擇界面閃爍的主要原因是屏幕內(nèi)容過多,刷新負載過大。本系統(tǒng)采用雙緩沖技術(shù)和MiniGUI.cfg配置文件的設置方法,實現(xiàn)只刷新屏幕的局部,解決了功能選擇界面閃爍問題。每次按上下左右鍵或關(guān)閉功能窗口時,用以下3個步驟實現(xiàn)重繪屏幕無效區(qū)域(以圖3為例)。
    ①A區(qū)用小圖標恢復,用函數(shù)StretchBlt(hdcmem,0,0,0,0,hdc,WIN_LEFT,WIN_TOP,WIDTH,HIGHT,(DWORD)0)實現(xiàn),其中hdcmem是內(nèi)存設備上下文,是用CreateCompatibleDCEx()函數(shù)創(chuàng)建的。該內(nèi)存設備上行文中已經(jīng)存有圖3下圖中的A區(qū)域信息(第一次是在窗口的MSG_ CREATE消息中保存的,第二次開始是在第二步驟保存的)。
    ②將B的圖片區(qū)域(小圖片)復制到內(nèi)存設備上下文,用函數(shù)StretchBlt(hdc,WIN_LEFT,WIN_TOP,WIDTH,HIGHT,hdcmem,0,0,0,0,(DWORD)0)實現(xiàn)。
    ③B區(qū)域的圖片放大顯示,通過函數(shù)FillBoxWithBitmap(hdc,WIN_LEFT,WIN_TOP,WIDTH,HIGHT,DESKIMAGE,&bitmap)實現(xiàn)。
    其中,WIN_LEFT、WIN_TOP、WIDTH和HIGHT分別表示圖片放大顯示區(qū)域的左、上坐標和寬、高。左、上坐標的定位公式如下:
    WIN_LEFT=水平基準坐標+(i%DESKCOLS)×(BLTWIDTH+水平間隔)
    WIN_TOP=垂直基準坐標+(i/DESKCOLS)×(BLTHIGHT+垂直間隔)
    式中,i表示第幾個圖片,DESKCOLS表示每一行的圖片個數(shù),BLTWIDTH和BLTHIGHT各表示圖片區(qū)域的寬和高。為了減少屏幕刷新負載,不在MSG_PAINT消息中刷新背景,而是用MiniGUI.cfg配置文件中的bgpicture參數(shù)指定背景圖,并在指定的目錄中存放背景圖文件。該參數(shù)在MiniGUI的4種渲染器中都有,即在不同的渲染器中,都可以用該方法,無需用代碼去實現(xiàn)背景圖的刷新。

結(jié)語
    本文詳細地描述了基于MiniGUI的嵌入式系統(tǒng)用戶界面關(guān)鍵問題的解決方案,即無抖動動畫的實現(xiàn)方案和功能選擇界面閃爍問題的解決方案。當需要實現(xiàn)動畫,而且動畫文件較大時,可以采用雙緩沖技術(shù)解決動畫抖動的問題。但是雙緩沖技術(shù)需要額外的內(nèi)存設備上下文,所以簡單的動畫效果可以用SendMessage(窗口句柄,STM_SETIMAGE,pngmap,0)函數(shù)更換圖片的方式實現(xiàn)較好。

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

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

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

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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