您的位置 首页 软件

选用MiniGUI双缓冲技能和AT91SAM9263完成数字加密电话体系的规划

采用MiniGUI双缓冲技术和AT91SAM9263实现数字加密电话系统的设计-在需要丰富人机交互信息的嵌入式系统应用中,高精度的动态图像显示非常重要。因此,嵌入式系统对GUI的实时性和稳定性的要求也越来越明显。但是,动态图像的抖动和刷新延迟的问题在嵌入式系统中经常出现,影响系统的显示效果。

导言

在需求丰厚人机交互信息的嵌入式体系运用中,高精度的动态图画显现十分重要。因而,嵌入式体系对GUI的实时性和稳定性的要求也越来越显着。可是,动态图画的颤动和改写推迟的问题在嵌入式体系中经常呈现,影响体系的显现作用。

国产图形用户界面体系MiniGUI供给齐备的多窗口机制和类Win32音讯传递机制,便于完结多个进程间的音讯传递。并且具有占用内存少、可移植性好等特色,因而在嵌入式范畴中被广泛运用。但在实践运用中,发现了两个问题:一是用MiniGUI的animation控件完结时呈现动画颤动,二是显现较多图片的窗口改写时屏幕闪耀,严峻影响屏幕的显现作用。为处理以上两个问题,本体系选用MiniGUI的双缓冲技能和多张图片替换显现的办法,并经过实践运用证明了该办法的有效性。

1、 数字加密电话体系架构

1.1 硬件体系

数字加密电话硬件体系的芯片选用ATMEL公司的AT91SAM9263处理器。主频为200 MHz,2 MB高速Data Flash、64 MB NAND Flash和64 MB SDRAM。中心板的对外接口包含键盘接口、LCD接口、LED接口、MODEM模块、电话机模块和接口、SD卡接口和USB主从接口等。如图1所示。

选用MiniGUI双缓冲技能和AT91SAM9263完结数字加密电话体系的规划

1.2 软件体系

操作体系:开放源码的Linux操作体系是开发嵌入式产品的首选。本体系选用开放源码的嵌入式Linux体系。它的内核版别为2.6.22,是依据default_at91sam9263_config装备的。

穿插编译东西链:选用arm-linux-XXX。arm-linux-gcc用于穿插编译源程序,生成履行文件;arm-linux-strip用于去掉履行文件中的调试信息,起到减小履行文件巨细的作用。

GUI体系:MiniGUI是国产的一款面向嵌入式体系、跨操作体系的轻量级国产高档窗口体系(Windowing System)和图形用户界面(Graphi-cal User Interface,GUI)支撑体系。经过10余年的开展,MiniGUI现已开展成为比较老练、功用优秀且功用丰厚的跨操作体系的嵌入式图形界面支撑体系。MiniGUI可在Linux/μClinux、eCos、μC/OS-II、VxWorks、pSOS、ThreadX等操作体系以及Win32平台上运转,已广泛运用于手持信息终端、机顶盒、工业操控体系、便携式多媒体播映器等产品中。

MiniGUI支撑BMP、GIF、PNG、JPEG、PCX、TGA等常见图画文件和位图、图标、光标等Windows资源文件,支撑多字符集和多种字体,库文件较小且可装备。MiniGUI3.0比其之前的版别,在以下几方面有新的开展:

①主窗口双缓冲技能,能够在自定义缓冲区中取得整个窗口的烘托成果。

②外观烘托器技能,外观烘托器供给了多种风格的主窗口和控件界面外观,并且运用程序可在几种风格之间动态切换。

③双向文本显现与输入,增加了对阿拉伯文和希伯来文言语的支撑,完结了文本的变形和重排,并供给了阿拉伯文和希伯来文键盘的支撑。

④支撑不规则窗口,如圆角矩形、非矩形窗口等。

⑤增加了组件mGUTIlis,该组件为用户供给了一些常用的对话框模板,便于代码复用。

⑥增加了组件msgplus,该组件是对MiniGUI图形制作接口的一个扩大和增强,首要供给对二维矢量图形和高档图形算法的支撑。

因而,MiniGUI十分合适编写嵌入式图形用户界面运用程序。

1.3 用户界面规划

数字加密电话体系需求显现当时的体系状况和具体内容,以此进行体系与用户之间的信息沟通,因而对界面的稳定性和实时性要求较高。本体系将整个屏幕分为3个区域,即状况区域、Logo与时刻显现区域和主显现区域,如图2所示。状况显现区首要表明当时体系的作业状

态和设备的状况。比方是挂机态仍是摘机态,是加密仍对错加密态,是否刺进U盘,当时的数据传输率为多少等。不同的状况需求用不同的图片来显现。从一个状况过渡到另一个状况,需求用一个动画来表明。主显现区域首要显现表明当时体系的作业情况的动画或文字提示。比方表明一般语音电话的动画、表明正在加密传输的动画,也能够显现其他信息,如体系功用挑选界面、选文件界面、日志办理界面等。Logo及时刻显现区显现公司的Logo与当时体系时刻。关于本体系的界面规划来说,最重要的是各种动画的显现要流通。

选用MiniGUI双缓冲技能和AT91SAM9263完结数字加密电话体系的规划

2 、完结GUI时存在的两个问题

本体系GUI的完结问题首要是各种图片的显现、动画和挑选功用界面的完结。图片的显现办法很简略,因而,在下面只介绍动画和挑选功用界面的完结办法及存在的问题。

2.1 动画的完结办法及存在的问题

MiniGUI为完结动画,已供给了animaTIon控件,用animaTIon控件完结动画的进程十分简略:

①预备动画文件,文件格局应该是GIF格局,GIF格局的动画文件能够用Flash和PhotoShop生成。

②用函数CreateAnimaTIonFromGIF89aFile()读入GIF文件。

③用CreateWindow()创立动画显现窗口。

④用SendMessage()函数操控动画,该函数的第2个参数为ANM_STARTPLAY表明发动动画,参数为ANM_PLAYSTOP表明暂停动画。也能够用函数SendMessage(GetDlgItem(hInitface,IDC_MAINANIMATION),ANM_SETANIMATION,0,(LPARAM)anim)完结替换动画文件。可是,在嵌入式环境下,运用该办法播映动画时,在状况显现区和主显现区内都发生严峻的颤动现象。并且屏幕越大颤动就越显着,分辨率为480×640时的颤动现象比240×320时更显着。削减动画的帧数或延伸每一帧的播映时刻,颤动依然存在,严峻影响屏幕的显现作用。

2.2 功用挑选界面的完结及存在的问题

功用挑选界面一般由多个图片来组成,各表明不同的体系功用,用上下左右键挑选不同的功用,按Enter键运转相应程序,即翻开另一个窗口,完结相应功用。当封闭窗口时从头显现功用显现界面。为差异被选中功用和未选中功用,扩大或下沉显现当时被选中的功用图片,而前一个被选中功用图片康复成本来的巨细,如图3所示。每次用上下左右键挑选功用时和封闭功用窗口时,都要从头改写布景,偏重绘窗口客户区的各个图片。由于MiniGUI不保存被掩盖区域的内容,因而在MSG_PAINT音讯中需求重绘的内容较多,重绘图片的常用办法是用FillB-oxWithBitmap()函数填充相应图片区域,可是这种办法加剧了屏幕改写负载,引起屏幕显着地闪耀。

选用MiniGUI双缓冲技能和AT91SAM9263完结数字加密电话体系的规划

3、 关键问题的处理办法

3.1 动画颤动问题的处理

发生动画颤动的首要原因是,用animation控件完结动画时,频频地发生MSG_PAINT音讯,加剧了屏幕改写的恳求。MiniGUI经过判别窗口是否含有无效区域来确认是否需求重绘窗口。假如需求重绘就向运用程序发送MSG_PAINT音讯。窗口的重绘使命需由运用程序自己完结,由于MiniGUI不保存被掩盖区域的内容。MiniGUI的窗口在呼应MSG_PAINT音讯的时分进行杂乱的图形处理,尤其是在改写时,对图画的擦除和重写造成了图画色彩的反差。当绘图音讯的呼应很频频时,这种反差也就越发显着,所以咱们就看到了动画颤动的现象。为了处理动画颤动的问题,体系选用了双缓冲技能和多个图片替换显现的办法。并在实践运用中证明了该办法是卓有成效的。双缓冲技能要比直接操作显存速度更快,因而能够处理颤动现象。

选用双缓冲技能完结动画的基本思路是这样的,首先在体系内存中树立一个相似显现内存的内存设备上行文,然后将待显现图片填充到该内存设备上行文中,最终再经过位复制办法复制到显现内存中。为了到达动画的作用,将多个图片循环显现,即设定定时器和静态变量,每逢定时器触发时,依据静态变量的值显现不同的图片,静态变量由0到MAX循环。完结动画的具体流程如图4所示。定时器的时刻距离和图片的数量能够依据具体情况恣意调整。本体系的主显现区动画选用这种办法完结后,动画作用流通,不再有颤动现象。

选用MiniGUI双缓冲技能和AT91SAM9263完结数字加密电话体系的规划

3.2 功用挑选界面闪耀问题的处理

功用挑选界面闪耀的首要原因是屏幕内容过多,改写负载过大。本体系选用双缓冲技能和MiniGUI.cfg装备文件的设置办法,完结只改写屏幕的部分,处理了功用挑选界面闪耀问题。每次按上下左右键或封闭功用窗口时,用以下3个过程完结重绘屏幕无效区域(以图3为例)。

①A区用小图标康复,用函数StretchBlt(hdcmem,0,0,0,0,hdc,WIN_LEFT,WIN_TOP,WIDTH,HIGHT,(DWORD)0)完结,其间hdcmem是内存设备上下文,是用CreateCompatibleDCEx()函数创立的。该内存设备上行文中现已存有图3下图中的A区域信息(第一次是在窗口的MSG_ CREATE音讯中保存的,第2次开端是在第二过程保存的)。

②将B的图片区域(小图片)复制到内存设备上下文,用函数StretchBlt(hdc,WIN_LEFT,WIN_TOP,WIDTH,HIGHT,hdcmem,0,0,0,0,(DWORD)0)完结。

③B区域的图片扩大显现,经过函数FillBoxWithBitmap(hdc,WIN_LEFT,WIN_TOP,WIDTH,HIGHT,DESKIMAGE,&bitmap)完结。

其间,WIN_LEFT、WIN_TOP、WIDTH和HIGHT别离表明图片扩大显现区域的左、上坐标和宽、高。左、上坐标的定位公式如下:

WIN_LEFT=水平基准坐标+(i%DESKCOLS)×(BLTWIDTH+水平距离)

WIN_TOP=笔直基准坐标+(i/DESKCOLS)×(BLTHIGHT+笔直距离)

式中,i表明第几个图片,DESKCOLS表明每一行的图片个数,BLTWIDTH和BLTHIGHT各表明图片区域的宽和高。为了削减屏幕改写负载,不在MSG_PAINT音讯中改写布景,而是用MiniGUI.cfg装备文件中的bgpicture参数指定布景图,并在指定的目录中寄存布景图文件。该参数在MiniGUI的4种烘托器中都有,即在不同的烘托器中,都能够用该办法,无需用代码去完结布景图的改写。

4、结语

本文具体地描绘了依据MiniGUI的嵌入式体系用户界面关键问题的处理计划,即无颤动动画的完结计划和功用挑选界面闪耀问题的处理计划。当需求完结动画,并且动画文件较大时,能够选用双缓冲技能处理动画颤动的问题。可是双缓冲技能需求额定的内存设备上下文,所以简略的动画作用能够用SendMessage(窗口句柄,STM_SETIMAGE,pngmap,0)函数替换图片的办法完结较好。

责任编辑:gt

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/ruanjian/95992.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部