嵌入式系统图形用户界面(GUI)的设计与研究

嵌⼊式系统图形⽤户界⾯(GUI)的设计与研究
1 引 ⾔ 在⼯业控制领域⾥,各种仪器仪表、智能⼯控设备也⼴泛采⽤了嵌⼊式技术,但由于资源有限, 这些系统⼀般不希望建⽴在庞⼤累赘的、⾮常消耗系统资源的操作系统和GUI之上,⽐如Windows或X Window。这些系统对轻型GUI的需求更加突出。因此,在⼯业控制系统中实现⼀个简洁、快速、⽅便的嵌⼊式GUI系统具有⼴阔的市场应⽤前景。 嵌⼊式系统往往是⼀种定制设备,它们对GUI的需求也各不相同。
1 引 ⾔
在⼯业控制领域⾥,各种、智能⼯控设备也⼴泛采⽤了嵌⼊式技术,但由于资源有限, 这些系统⼀般不希望建⽴在庞⼤累赘的、⾮常消耗系统资源的操作系统和GUI之上,⽐如Windows或X Window。这些系统对轻型GUI的需求更加突出。因此,在⼯业控制系统中实现⼀个简洁、快速、⽅便的嵌⼊式GUI系统具有⼴阔的市场应⽤前景。
嵌⼊式系统往往是⼀种定制设备,它们对GUI的需求也各不相同。有些系统只要求⼀些图形功能,⽽有些系统要求完备的GUI⽀持,所以嵌⼊式GUI必须呈模块结构,便于配置和定制。本⽂根据嵌⼊式系统的特点提出⼀种嵌⼊式GUI的实现⽅案,通过本⽅案设计实现满⾜⼯控要求的嵌⼊式GUI系统不仅具有很好的通⽤性,还具有轻型、占⽤资源少,⾼性能,⾼可靠性,可配置等特点,可以⽅便地移植到各种⼯控
太阳能安全帽
嵌⼊式系统中。
2 嵌⼊式GUI系统的关键技术
楼宇对讲门禁系统
2.1 消息驱动机制
所谓的“消息驱动”或 “事件驱动”,就是⽤户可以⽤点击任意的窗⼝和控件,也可以⽤键盘在当前输⼊焦点输⼊内容;由⽤户主导程序下⼀步如何操作,⽽不是像字符时代那样由程序来主导⽤户。嵌⼊式GUI采⽤了这⼀思想,以消息驱动机制为核⼼,把GUI系统的各个组成部分有机地结合起来。
2.2 窗⼝管理技术
为了实现对多窗⼝的⽀持,即允许⽤户把内容显⽰在不同的、⽽且可以重叠的窗⼝区域内,这必然涉及到各个窗⼝在屏幕上的层叠顺序,需要GUI系统提供⼀种有效的窗⼝管理机制,我们采⽤⼀种称为窗⼝Z序的机制来进⾏管理。
2.3 实现平台⽆关性
嵌⼊式系统应⽤的领域不同,要求的GUI底层设备也不同,为了便于GUI移植到不同硬件平台,应设计隔离硬件设备的硬件抽象层。它定义了⼀组不依赖于任何特殊硬件的抽象接⼝,所有顶层的图形操
作和输⼊处理都建⽴在抽象接⼝之上。它位于硬件设备和软件之间,实现对显⽰输出设备(如显⽰器)、⽤户输⼊设备(键盘、)的控制,向GUI上层软件提供统⼀的编程接⼝。我们封装了硬件抽象接⼝的实现函数,移植到不同的硬件,只需考虑修改直接和硬件打交道的⼏个函数即可,移植者⽆需关⼼硬件抽象接⼝的实现。通过这个设备硬件抽象层隔离具体的物理实现,以实现GUI硬件⽆关性。
3 嵌⼊式GUI的体系结构
根据上⾯的分析,嵌⼊式GUI系统采取分层设计的结构,其分层结构图如图1所⽰。
从图中可以看出,最底层GAL和IAL是与底层输⼊输出设备接⼝,便于GUI挂接不同的输⼊输出设备,实现GUI系统良好的可移植性和通⽤性。中间的核⼼层包含了嵌⼊式GUI全部功能的算法。上层是API层,提供操作各种GUI对象(如窗⼝、菜单等)的应⽤编程接⼝函数。
4 嵌⼊式GUI核⼼层的总体设计
GUI核⼼层主要由三个⼦系统组成,分别是服务管理⼦系统、事件管理⼦系统、窗⼝管理⼦系统,各⼦系统相对独⽴⼜彼此联系。图2为GUI 系统核⼼层的实现框架图。
4.1服务管理⼦系统
4.1.1 图形设备接⼝
图形设备接⼝(GDI)是建⽴在图形输出抽象层上的⼀个独⽴的绘图应⽤接⼝,它将图形输出抽象层提供的接⼝功能进⼀步封装和扩充,向更⾼层的应⽤程序接⼝提供使⽤更为简便,功能更为完善的绘图功能。GDI提供的图形服务包括:基本绘图原语、⽂本和字体⽀持、图像格式⽀持、⾼级图形功能。
4.1.2 内存堆管理
内存堆管理是为了避免在系统运⾏过程中动态分配和释放内存时引起存储碎⽚。
4.1.3 器管理
系统的时间管理需采⽤器管理来实现。当⽤户需要的处理某项操作将会使⽤该模块,在系统中也有使⽤,如编辑框控件中光标的闪烁等。
4.2 事件管理⼦系统
事件管理⼦系统主要以消息驱动机制为核⼼,负责定义、分发、处理所有的GUI事件。事件管理⼦系统⽀持GUI对象间通信和GUI系统与GUI 外部系统间通信。
4.3 窗⼝管理⼦系统
正渗透膜
窗⼝管理⼦系统负责创建、删除、管理各种窗⼝,实现各种预定义窗⼝(控件)逻辑,进⾏裁剪以保证多窗⼝的正确显⽰,以及各种窗⼝逻辑事件的产⽣和处理。
4.3.1 屏幕和窗⼝管理
窗⼝是GUI的基础,⼀切的GUI操作都是在窗⼝的基础上完成的。在⽤户主任务中,我们⾸先建⽴⼀个基准窗体,覆盖整个幕,此窗⼝可称为桌⾯,然后在其上建⽴任务窗⼝以及⼦窗⼝。窗⼝管理⽀持多线程,以⽅便进⾏窗⼝的移动、⼤⼩改变、隐藏恢复、焦点切换等,并最终维护由于多窗⼝操作引起的Z序变化。窗⼝管理主要负责窗⼝的绘制、窗⼝的重画及消息处理。
4.3.2 基本控件
控件可以理解为主窗⼝中的⼦窗⼝。⼀般地,GUI系统都会预先定义⼀些控件类,当利⽤某个控件类创建控件之后,所有属于这个控件类的控件均会具有相同的⾏为和外观。利⽤这些技术,可以确保⼀致的⼈机操作界⾯;⽽对程序员来讲,可以像搭积⽊⼀样地组建图形⽤户界⾯。本模块提供了常⽤的预定义控件类,包括按钮、单选框、复选框、静态框等。
5 嵌⼊式GUI系统核⼼层的具体设计与实现
5.1 窗⼝剪切算法的设计
GUI采⽤窗⼝剪切算法来⽀持多窗⼝风格。窗⼝剪切算法以矩形为基本单位来表⽰剪切域,算法以设备上下⽂中全局剪切域、局部剪切域和有效剪切域等属性,根据⼀定的⼯作机制来限定图形输出区域,任何超过该设备上下⽂输出区域的部分均被裁剪。底层图形引擎在进⾏输出时,根据当前输出的剪切域进⾏输出的剪切操作,从⽽保证了窗⼝间重叠也不会混乱。
GUI系统⼀般利⽤Z序来管理窗⼝之间的互相剪切关系,根据窗⼝在Z序中所处的位置计算每个窗⼝的剪切域。我们可以将某个窗⼝全局剪切域归纳为原有剪切域中排除某个矩形⽽⽣成的:窗⼝的全局剪切域初始化为窗⼝矩形;当窗⼝之上有窗⼝覆盖时,则该窗⼝的全局剪切域为排除新窗⼝矩形之后的剪切域;沿Z序迭代第2步,直到最顶层窗⼝。
显然,在剪切域⾮常复杂,或者窗⼝⾮常多时,需要⼤量的矩形来表⽰每个窗⼝的全局剪切域,为⽀持运⾏时⼤量的剪切运算,剪切域的实现采⽤动态内存分配。
⽽在C程序中,如果频繁使⽤malloc和申请和释放每个剪切矩形,将带来许多问题。第⼀,malloc和是⾮常耗时的操作:第⼆,频繁的malloc和将导致C程序堆的碎⽚化,从⽽可能导致将来的内存分配失败。为了避免频繁使⽤malloc和free,在初始化时,建⽴了⼀个私有的堆,⾃⾏管理剪切域数据块的申请和释放。我们可以直接从这个堆中分配剪切矩形,⽽不需要从进程的全局堆中分配剪切矩形。这个私有堆实际是由⼀些空闲待⽤的剪切矩形组成的。每次分配时返回该链表的头节点,⽽在释放时放进该链表的尾节点。如果该链表为空,则利⽤malloc从进程的全局堆中分配剪切矩形。
与排除矩形相反的操作是包含某个矩形到剪切域中。这个操作⽤于隐藏或者销毁某个窗⼝时。当⼀个窗⼝被隐藏或销毁时,该窗⼝之下的所有窗⼝将受到影响,此时,要将被隐藏或销毁窗⼝的矩形包含到这些受影响窗⼝的全局剪切域中。可设置⼀个函数专⽤于该类操作。为确保剪切域中矩形互不相交,该函数⾸先计算与每个剪切矩形的相交矩形,然后将⾃⼰添加到该剪切域中。
5.2 消息驱动机制的设计与实现
5.2.1 消息队列及消息循环的设计
GUI系统的每个输⼊设备随时可能产⽣输⼊事件,同时系统内部也可能发⽣各种事件, GUI系统的输⼊层接收到这些事件后就合成各种不同的消息,然后向上传递。对于操作系统来说只能顺序地向应⽤程序传送消息,因此,若同时出现多个事件,必须有⼀个机制来管理这些同时产⽣的事件。在GUI系统中这种机制就称为消息队列,按照事件的时序把它们的消息送⼊队列,窗⼝系统再依次向应⽤程序发送。消息队列的数据结构为⼀个全局的循环队列,同时定义⼀组基于该循环队列的操作:初始化消息队列、清空消息队列、压⼊消息队列和弹出消息队列等等。在实际设计消息队列时要考虑消息的传递⽅式、优先级和特殊消息的处理等问题。
GUI系统采⽤消息驱动的框架结构;应⽤程序建⽴⼀个循环,GUI不断轮询消息队列,把获得的消息根据消息路由算法进⾏分发和投递,送达⽬的对象,由⽬的对象提供消息处理。处理结束后,重新进
⼊消息循环,直⾄退出消息出现,消息循环的流程如图3所⽰。
如果消息队列为空,GUI将优先等待外部事件的发⽣,然后把等待到的事件(外部输⼊事件或超时事件)封装为消息压⼊消息队列。窗⼝在创建时⼀定要提供⼀个消息处理函数,⽤户在该函数中对每⼀个关⼼的消息作出判断和处理。
ftd vs ks
5.2.2 消息路由算法
GUI的消息路由基本主线(⾃顶向下):桌⾯-->某个主窗⼝-->某个控件。系统消息路由算法包括键盘路由算法和路由算法。
6 ⽤户应⽤程序举例
图4给出的是⼀个典型的嵌⼊式GUI⽅案设计的流程图。假设这个系统有n个页⾯,每个页⾯有若⼲GUI元件。当有消息或事件时,系统进⾏消息处理,如需转换界⾯进⼊下⼀界⾯,系统则进⾏窗⼝之间的切换,包括窗⼝的关闭、剪切、删除、隐藏等动作。
7 结束语
本⽂详细介绍⼀种为⼯业控制嵌⼊式系统应⽤⽽开发的的轻量级、功能丰富、易定制、易移植的图形
粗糙的布片
⼈机界⾯开发包,与同类产品相⽐具有代码量⼩、执⾏效率⾼的特点。⽤C语⾔编写的GUI程序可以⽅便地移植到各种⼯业控制嵌⼊式系统中,使⽤简单、通⽤性好,能满⾜⼀些较复杂界⾯显⽰的需要,其已运⾏于基于ARM微处理器的嵌⼊式硬件平台之上,已经在⼯控嵌⼊式系统中得到应⽤。实⽤表明,我们设计的GUI系统运⾏良好,很好地满⾜了⼈机交互界⾯的要求。

本文发布于:2024-09-22 06:48:51,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/182473.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:消息   系统   剪切   管理   队列   矩形
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议