一种嵌入式GUI的实现方案
2017-05-09吴健学
陈 皓,吴健学
(1.光纤通信技术和网络国家重点实验室 湖北 武汉430074;2武汉邮电科学研究院 湖北 武汉430074)
一种嵌入式GUI的实现方案
陈 皓1,吴健学2
(1.光纤通信技术和网络国家重点实验室 湖北 武汉430074;2武汉邮电科学研究院 湖北 武汉430074)
针对市场上主流GUI系统可移植性不够好,实时性差强人意的问题,对比了国内外几种常见的嵌入式GUI的实现方式,研究了嵌入式GUI系统的关键技术,采用了将GUI系统模块化分层的方法,降低与底层模块的耦合性,通过交叉编译的方式进行开发调试,提出了一种高效的嵌入式GUI的实现方案。该图形用户界面系统具有高可靠性,结构简单,便于扩展维护等特点,能较好的满足嵌入式应用的需求。
嵌入式系统;图形用户界面;图片解析;消息处理
图形用户界面[1](Graphical User interface,GUI)是继字符用户界面(Character User Interface,CUI)之后提出的新一代用户界面,它拥有直接操作、用户控制、保存配置、界面定制[2]、信息反馈等特征。客户不必通过输入大量的命令,而是通过键盘、鼠标、面板、东视键盘等外围设备[3]来操作窗口、切换画面、保存配置,因其简单易用性而深受广大用户的喜爱,现已成为大多数操作系统用户接口的首选。因此,给嵌入式系统设计一个高效可观的图形用户界面,使用户和产品之间方便的进行沟通,已成为实际应用的重点。
一个优秀的操作系统[4]应该提供良好的图形用户界面,相比于其他系统上的GUI,嵌入式系统下的图形用户界面对实时性、可靠性、资源利用率要求更高。文中根据嵌入式系统的特点设计实现一种嵌入式GUI软件结构,此系统高效灵活、操作便捷、可裁剪并且易于维护。
1 嵌入式GUI的设计准则和关键技术
GUI是计算机操作系统的重要组成部分。一个完整的GUI系统应该包括菜单、视窗、文件界面、设备状态显示、滚动轴等元素。
嵌入式图形用户界面为系统本身提供了应用于特殊场合的人机交互接口[5]。而实际应用当中嵌入式系统硬件资源常常是有限的,因此嵌入式系统对其GUI本身的一般有以下基本要求:
1)占用内存少以及响应时间短,要求较高的实时性;
2)图形算法[6]简洁高效,占用较少的资源;
3)结构模块化便于移植;
4)可操作性强能够满足人们的日常需要。
随着嵌入式系统的高速发展,国内外的开发商已推出了多种用于嵌入式环境的图形用户界面,其实现方法主要有以下3种:
1)市场上已成熟的GUI开发商开发的嵌入式GUI技术
如 Qt/Embedded[7]、MicroWindows、MiniGUI[8]等。这些嵌入式图形用户界面的技术由专门的厂商开发,能够缩短研发的周期。
2)使用特定嵌入式操作系统的图形软件包
如uC/GUI、GRAFIX等软件包。这种方法让嵌入式产品使用的操作系统和原有的操作系统配合紧密,缺点是软件包昂贵,并且功能相对简单,不具备操作系统之间的移植性。
3)按照定制需求开发具有相应功能的GUI系统
根据特定设备的图形输出接口,开发与之对应的功能接口,可以高效、简捷的实现要开发的功能。
在以上实现方法中,不同方法开发出的图形用户界面具有不同的性能。在实际应用中,应该根据产品的需求,选用适合的图形用户界面开发工具。针对所开发专用的嵌入式硬件系统,文中选择方法3)来实现一个高效的、便于客户定制的GUI软件结构方案。
2 嵌入式GUI的总体设计
2.1 嵌入式GUI的模块化分层
结合嵌入式系统的特性,GUI模块位于操作系统之上,应用程序之下,为用户提供美观大方的人机交互接口,如图1所示嵌入式GUI系统总体结构图。
图1 嵌入式GUI系统总体结构图
其中,输入抽象层(Input Abstract Layer,IAL)用于收集底层输入设备如键盘、面板以及鼠标等的硬件消息,包括键盘输入、触摸点击等,传送给逻辑处理层,再由逻辑处理层根据相应的消息显示相应的处理。多用于用户登录输入ID和密码、设置用户信息、查询日志等应用场景。
图形抽象层(Graphics Abstract Layer,GAL)提供一些基本的绘图操作以及对图形属性的读取和修改。其作用主要是完成画点、画线、矩形以及填充区域等基本的绘图功能,包括对视频抽象层(Video Abstract Layer,VAL)和输入抽象层区域的划分。GAL层提供一组抽象接口,包括GDI_Pixel,GDI_Line,GDI_FillRect等,这些接口基于Linux控制台下的FrameBuffer技术。Linux2.2.xx及以后的内核版本当中都带有FrameBuffer[9],它是运行在Linux环境下的一个优秀的图形接口。QT、GTK等以 Linux作为操作系统的图形界面程序都是基于FrameBuffer来实现的,FrameBuffer技术已经较为成熟,这里暂不多说。对于GAL提供的抽象接口,设计者可以通过传入显示坐标、显示属性(颜色,线条宽度等)以及是否与别的区域嵌套,来实现方便用户使用的界面。
GAL层对图形文件的处理是基于 dec_jpg,dec_logo等抽象接口,这些接口使用 open,lseek,read,close这些系统调用函数读取图形文件并对其进行解码,然后在内存上动态申请相应大小的Buf,保存图片解析后的内容。
视频抽象层(VAL)常常应用于对音视频流的操作。视频应用是嵌入式系统的一个重要发展方向,近些年多媒体技术发展迅速,人们对音频、视频信息的处理要求越来越高。由于各个嵌入式系统的视频编解码设备和显示设备常常有很大差异,在 GUI系统设计过程中,基于不同的底层设备,应该封装相对应的视频流操作抽象接口,以方便在视频应用方面的移植。
2.2 嵌入式GUI的窗口显示界面
窗口的显示是GUI系统的核心,最直观的提供给用户操作接口,主要包括以下部分:
主窗口:主窗口提供子窗口的接口,包括功能划分、菜单、皮肤切换的功能实现,而子窗口是接受和处理事件的主体,每个功能对应一个或者一组子窗口。对窗口的管理包括窗口的绘制、窗口的叠加以及窗口间消息处理[10]。
控件Button:Button分布于子窗口页面之上,能够接收键盘、鼠标和面板等外部输入,也可以在自己的区域内通过软键盘进行输出。常用的控件有按钮、文本框、输入框等,其中按钮又可细分为用于处理自定义的控件CButton,子窗口在主窗口上的显示、菜单、工具栏以及子窗口间的跳转的实现都是用的这种控件;文本框包含CRowButtonNumEdit和CRowButtonTextEdit控件,其中CRowButtonNumEdit用于数字的显示,例如:时间、密码和设备ID等等,CRowButtonTextEdit主要用于显示汉字及其他多国语言。所以说,控件构成了整个GUI系统的功能载体。
消息处理:如果说主窗口、子窗口以及控件构成了GUI系统的可视框架,那么外部设备、异常事件以及控件与控件之间消息的处理就是GUI的功能实现。这里通过定义Cbasewin作为窗口基类,Cbasewin类中包含全局链表m_list用于链接所有窗口以及窗口上的控件、窗口名称m_wTitle用于区分不同的窗口,还有最为重要的消息处理函数 virtual BOOL ProcessMessage(Msg*msg),其中Msg结构体的定义如下:
这样以链表的方式管理窗口间的切换,能够在占有较少资源的情况下实现窗口的独占性、控件消息处理的不冲突。对消息本身的管理需要一个消息线程来实现,并在线程接口中控制消息的最大数目来防止操作不当导致消息的溢出。
3 嵌入式GUI开发环境
通常来说嵌入式开发板的硬件资源是有限的,不能直接在单板上进行开发,这就需要软件工程师通过交叉编译的方式进行研发调试。通常采用“开发设备+目标设备”的形式,开发设备和目标设备一般采用串口的连接方式,这种方式不必考虑网络是否互通,较为方便,当然也可以通过网口互联,这种情况就要求开发设备和目标设备网络上是同一网段并且是互相可达的。
嵌入式GUI开发过程中,目标设备是嵌入式的架构使用的是ARM处理器[11],而开发设备的处理器一般是X86结构的[12],处理器不同的话,在开发设备上就需要建立适合目标设备的交叉编译环境。程序在开发设备上经过“编译-连接-执行”得到可以在目标设备上运行的可执行文件。通过串口或者网口将得到的执行文件和所需要的库文件拷贝到目标设备上运行就可以启动开发板。同样在开发设备上能够通过串口和网口查看目标设备上的操作信息、Bootloader[13]启动信息和源程序里为了调试所加的打印信息。嵌入式GUI开发平台结构图如图2所示。
图2 嵌入式GUI开发平台结构图
4 实际应用
以上分析的GUI系统已经用于某型视频监控[14]设备的使用并量产销售。具体运行时,首先在Linux的开发环境下使用Makefile编译GUI模块的代码程序,并链接所使用的底层库文件,生成名为GUI的执行文件;将生成的GUI文件以及所用到的库文件通过命令拷贝到基于ARM芯片的设备当中,运行即可通过VGA[15]显示出简洁高效的图形用户界面。如图3所示,是在His3531芯片的硬件环境下实现的图形用户界面。
图3 某视频监控系统的GUI界面
5 结束语
文中提出了一种轻型高效的嵌入式图形用户界面的实现方案,在完成了上述各 GUI系统模块的基础上,构建了一个完整的嵌入式 GUI并基于该系统,开发了一套完整视频监控系统,就测试结果以及客户的反馈来说已经验证了该GUI系统的稳定性,可以很好地满足人们的日常交互。该GUI系统结构简单,与同类产品相比实时性好、代码量少、可靠性高,具有良好的可移植性与可裁减性。
[1]黄小旭.嵌入式系统图形用户界面开发技术研究[D].南京:南京邮电大学,2014.
[2]冉琛雯,张珣.智能家居系统界面定制技术的研究[J].物联网技术,2014,10(3):1-3.
[3]程科.嵌入式Linux设备驱动程序的设计与研究[D].成都:电子科技大学,2007.
[4]任慰.以实时操作系统为中心的嵌入式系统平台化设计研究[D].武汉:华中科技大学,2013.
[5]刘铁良.增强现实系统中人机交互技术研究[D].大庆:东北石油大学,2014.
[6]肖飞.基于图像特征提取和特征点描述的匹配算法研究及其应用[D].成都:电子科技大学,2013.
[7]范朋.基于Qt的嵌入式Linux系统GUI的研究与实现[D].北京:北京邮电大学,2011.
[8]张磊,王亚刚.基于MiniGUI的嵌入式图形界面的研究与实现[J].计算机技术与发展,2015,25(2):3-5.
[9]聂和平.基于ARM9的嵌入式Linux系统移植与驱动开发[D].南京:南京邮电大学,2013.
[10]舒红霞,王继红.分布式实时操作系统消息机制的设计与实现[J].计算机工程与设计,2009,29(9):2-4.
[11]张欢庆.基于ARM处理器的嵌入式Linux系统关键技术研究[D].山东:山东师范大学,2013.
[12]刘帅.X86、ARM、MIPS微处理器架构浅析[J].智富时代,2015,18(9):3-5.
[13]王景存,高峰.基于ARM9的Bootloader的分析及设计[J].现代电子技术,2010,20(3):1-3.
[14]方卫民.基于ARM的嵌入式网络视频监控系统设计与实现[D].北京:北京邮电大学,2008.
[15]朱奕丹,方怡冰.基于FPGA的图像采集与VGA显示系统[J].计算机应用,2011,31(5):3-5.
Implement methord of embeded GUI system
CHEN Hao1,WU Jian-xue2
(1.State Key Laboratory of Optical Communication Technologies and Networks,Wuhan 430074,China;2.Wuhan Research Institute of Posts and Telecommunications,Wuhan 430074,China)
As the portability of popular GUI system in the market is not good enough and the real-time performance is poor,in this thesis,based on comparing with several familiar complement methods of embedded GUI system and investigating some pivotal technologies of the GUI,proposed a efficient scheme and different components solutions of the GUI system.This system adopts the approach of modular design,thus to reduce the coupling factor with the underlying layer.The development and debugging is in an environment of cross-compilation.This GUI system owns the advantages as high reliability,light-weight and is convenient for maintaining and function expansion,then it is able to satisfy with emdedded application requirement.
embedded system;graphical user interface;image resolution;message handling
TN919.8
:A
:1674-6236(2017)01-0064-03
2015-11-23稿件编号:201511210
陈 皓(1989—),男,河南商丘人,硕士。研究方向:通信与信息系统、通信软件。