




已阅读5页,还剩52页未读, 继续免费阅读
(计算机系统结构专业论文)面向对象嵌入式gui的设计与实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
硕士学位论文 i 摘 要 嵌入式系统的研究和开发是当前信息技术研究的热点之一。作为人机交互的 图形用户界面(gui)是嵌入式系统非常重要的组成部分。伴随着嵌入式系统的 迅速发展,嵌入式 gui 系统也得到了相应的发展,涌现出大量的嵌入式 gui 系 统。这些嵌入式 gui 系统因具有很好的易用性和强大的功能而被广泛使用。但其 为了具有应用上的通用性,很多时候都是以牺牲性能为代价。 利用面向对象的程序设计技术实现软件的重用是加速软件开发进程的根本途 径。 但是由于面向对象语言本身的复杂性以及嵌入式系统资源受限等特点的限制, 在嵌入式开发领域中对于它的支持还不够完善。相反,目前几乎所有的嵌入式开 发平台都对“标准 c(ansi c) ”这种简洁、高效的过程式语言有比较完善的支 持。如果能够对 ansi c 进行一定的扩展,既保持它的高效又能进行面向对象的 程序设计,将有效地提高嵌入式软件的开发效率,增强软件的可移植性和可维护 性。 本文作者参加了基于移动学习机的嵌入式 gui 系统的开发工作, 并在此基础 上完成了本论文。本文研究了面向对象编程语言的特性,结合 gui 应用编程的特 点实现了 ansi c 到面向对象编程语义的映射。在深入分析现有嵌入式 gui 系统 的基础上,充分借鉴它们的技术和优点,实现了一种面向对象的嵌入式 gui 系统 rbgui。 本文首先研究了多种流行嵌入式 gui 系统的特点, 并对其实现过程中的几项 关键技术如分层模型、窗口管理、消息机制和事件驱动等进行了分析。 然后基于移动学习机的应用特点,给出了 rbgui 的设计思想和体系结构, 并对其关键模块的实现机制进行了详细的分析。 通过该方案设计和实现的 rbgui 具有占用资源少、效率高、可移植性和可扩展性强等特点。对面向对象编程语言 的特性进行了一定的研究,针对 gui 应用编程的特点,抽象出了组件结构和组件 类的定义。在提出几个 gui 编程规范的基础上,给出并实现了 c 到面向对象编程 语义映射的具体解决方案。将 rbgui 应用到实际的系统中,分析了它的运行状 态以及它与其它任务之间的通信。 最后在仿真平台上完成了 rbgui 的性能测试与比较,并在实际的硬件平台 上完成了它的功能测试。 关键词:嵌入式;图形用户界面;面向对象;类;组件;消息;通信 面向对象嵌入式 gui 的设计与实现 ii abstract the research and development of embedded systems is one of the hot spots in the study of current information technology. the graphical user interface (gui) which is a man-machine interaction style is an extremely important part of the embedded system. with the rapid development of embedded system, the embedded gui system also developed quickly and many embedded gui systems have appeared in the world. they have been widely used because of their good usability and formidable functions. nevertheless, they usually have to sacrifice the performance in order to satisfy the request of the majority applications. the basic way to accelerate a software development progress is to realize the software reuse by using the object-oriented programming (oop) techniques. because of the limited resources in embedded system and the complexity of the oop language itself, oop cant be supportted very well in the embedded developing realm. on the contrary, almost all the embedded platforms surpport the ansi c very well, which is an efficient, terse and procedure-oriented program language. if we can make some extentions on the ansi c that it could not only support the oop but also keep its good efficiency, the progress of embedded software development would be speeded and the software would become more easy maintainable and replanting. the author finished this article aftert hanving taken part in the development of the embedded gui system based on mobile study machine for some time. this study investigated the characteristics of the oop language and the gui application programming and gained a method on how to map the c programing semantic to oop semantic. after having analysed existent embedded gui systems and referenced their strongpoints, an object-oriented embedded gui system (rbgui) has been realized in this paper. firstly,this paper researched the main characteristics of several popular embedded gui system, and then made the analysis on several key technologies such as hierarchical model、windows management、message mechanism and event driving etc. secondly,in view of the applicational characteristics of study machine, the architecture of rbgui system is presented. a detailed analysis on the realization of key module has been made in this paper. base on this architecture, rbgui saves 硕士学位论文 iii great system resources and meets the high efficient, easy replanting and expansible requirement in embedded systems. we researched the characteristics of the oop language. in view of the characteristics of gui application programming, definitions of widget structure and widget class have been abstracted. a solution on how to map the c programing semantic to oop semantic is provided and realized in this paper basing on having put forward several gui programming standards. an analysis has been made on the running status and its communication with other tasks by running the rbgui in actual system. finally,performance testing and comparison of rbgui system have been made in the simulation platform, and function testing was made in the actual hardware platform. key words: embedded; gui; orient-object; class; widget; message; communication 面向对象嵌入式 gui 的设计与实现 iv 插图索引 图 2.1 gui 层次模型 .7 图 2.2 消息驱动的应用程序简单构架 .9 图 2.3 z 序示意图 .10 图 2.4 translatemessage 程序流程 .10 图 3.1 h6 电子画板界面 .14 图 3.2 rbgui 体系结构 .15 图 3.3 电子画板时的组件对象间的逻辑关系 .17 图 3.4 电子画板时的组件对象在内存中的组织关系 .17 图 3.5 桌面菜单时的组件对象在内存中的组织关系 .17 图 3.6 初始时的系统消息循环 .20 图 3.7 电子画板时的系统消息循环 .20 图 3.8 被对话框覆盖时的电子画板界面 .21 图 4.1 组件类注册表 .31 图 4.2 uim_class_subclass 程序流程 .32 图 5.1 rbgui 系统初始化过程 .37 图 5.2 rbgui 任务控制流程 .38 图 5.3 rbgui 任务与 jpeg 解码任务的通信 .38 图 5.4 按钮状态转换任务控制流程 .40 图 6.1 h6 仿真器效果图 .41 图 6.2 rbgui 与 minigui 的组件创建时间的比较 .42 图 6.3 事件响应时间的比较方案 .43 图 6.4 rbgui 与 minigui 的事件响应时间的比较 .43 图 6.5 h6 机器外型 .44 图 6.6 h6 英文十万界面 .44 图 6.7 h6 同步教学界面 .45 图 6.8 h6 中 mp4 播放器界面 .45 图 6.9 h6 电子相册预览界面 .45 面向对象嵌入式 gui 的设计与实现 湖湖 南南 大大 学学 学位论文原创性声明学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的 研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或 集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均 已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 作者签名: 日期: 年 月 日 学位论文版权使用授权书学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保 留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借 阅。本人授权湖南大学可以将本学位论文的全部或部分内容编入有关数据库进行 检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 本学位论文属于 1、保密,在_年解密后适用本授权书。 2、不保密。 (请在以上相应方框内打“” ) 作者签名: 日期: 年 月 日 导师签名: 日期: 年 月 日 硕士学位论文 1 第 1 章 绪论 1.1 项目来源及意义 教育是国家发展的基础。近年来,数字化学习的发展十分迅速,教育电子行 业也呈现空前繁荣的景象。据央视市场研究公司的数字分析,中国 5 亿人有学习 英语的需求,以 5%的购买率计算,英语学习机销量将达到 2500 万台的销售量, 以平均每台 800 元(电子词典、数码学习机售价平均线)价格计算,教育电子行业 的市场规模将达到 200 亿元。据统计数据显示,磁带复读机去年的全国市场销售 数量为 1500 万台,电子词典的销量也超过千万台。而新兴的英语学习机,作为整 合传统英语复读机和电子词典两大学习功能, 并融入 mp3 播放等娱乐体验的创新 产品,无疑有着更强劲的市场需求和竞争力1。 作为人机交互的图形用户界面是移动学习机系统软件中非常重要的组成部 分。伴随着嵌入式系统的迅速发展,嵌入式 gui 系统也得到了相应的发展,涌 现出大量的嵌入式 gui 系统,这些通用的嵌入式 gui 系统因具有很好的易用性 和强大的功能而被广泛使用。但其为了具有应用上的通用性,很多时候都是以牺 牲性能为代价,其中一个主要的表现是在体系结构的设计和实现上的效率低下。 对一些具体的嵌入式应用系统,其内部应用程序需要占用大量的 cpu 计算能力 等各种系统处理能力资源,而无法满足那些通用嵌入式 gui 系统对性能的高要 求。因此,对这类嵌入式系统,需要采用实现效率很高的嵌入式 gui 系统。有些 嵌入式 gui 系统尽管较为成熟,但真正在商品化产品中使用时会面临很高的授权 费用,无形中增加了产品的成本,使得产品在市场竞争中面临困境2。 中山市读书郎电子有限公司是一家致力于教育电子产品的研发、制造、销售 事业的高新技术企业。研发适用市场发展需要的掌上移动学习机已成为公司的新 的发展目标。拥有 gui 的知识产权,在源代码级拥有主动,就可以适应产品定义 的任何变化。从移动学习机体系结构的设计、实现效率以及市场竞争等方面考虑, 设计并实现一款适应实际需要的嵌入式 gui 系统是研制高性能低成本产品的必 要条件。 1.2 研究内容 本文的研究对象是一个基于嵌入式平台的 gui 系统,这个系统是商用移动学 习机的一个子系统。这个 gui 系统的研究工作主要包括以下几个方面: 面向对象嵌入式 gui 的设计与实现 2 (1)研究流行嵌入式 gui 的体系结构。 认真研究现有的流行嵌入式 gui 系统, 可以从中发现其存在的一些不足。这样在开发新的 gui 的时候,可尽量避免出现 类似的问题,从而使得新的系统在性能、资源占用、二次开发支持等方面得到提 高。同时,只有充分借鉴它们成功的设计结构,学习它们的优点,才能设计出一 款优秀的 gui 系统软件。 (2)研究开源嵌入式 gui 的关键技术。首先我们应该总结嵌入式 gui 设计的 特点,熟悉 gui 采用的关键技术和原理,然后深入到源码层去分析它们的具体实 现。只有这样才能真正把握 gui 的结构设计,掌握好技术难点与细节,指导整个 gui 软件开发的流程。 (3)研究面向对象技术在嵌入式 gui 系统中的应用。软件重用是提高软件开 发过程产品效率的一个最重要的方法之一3。面向对象技术(object orientation)提 供了很多支持灵活软件开发的机制。面向对象编程方法相对过程式的编程方法更 易于软件管理、软件重用和缩短开发时间4。而支持面前对象编程语言的嵌入式 开发平台很少且不成熟。如果对现有 c 进行有效的扩展,既最大限度保持 c 的优 点,又最大限度利用原有嵌入式系统的开发资源进行面向对象编程,就能有效地 提高 gui 应用软件的开发效率,增强软件的可移植性和可维护性。 (4)研究移动学习机的应用特点。 应该研究市场上流行移动学习类电子产品的 一般界面风格和特点,并且从用户的角度出发,研究用户的实际需求,解决用户 与界面交互过程中遇到的问题。只有这样才能量体裁衣,制定最适合它的设计方 案。 1.3 本文的主要工作 本文通过对多种嵌入式 gui 的设计原理进行分析和研究,结合移动学习机的 发展特点和面向对象技术, 实现了一种面向对象嵌入式 gui 系统。 具体工作如下: (1)对当今流行的嵌入式 gui 系统的特点和实现方法进行了一定的研究,并 对其实现过程中的几项关键技术如分层模型、屏幕管理、消息机制和事件驱动等 进行了分析。 (2)结合学习机应用特点,给出了 rbgui 的体系结构,并对其关键模块的实 现机制进行了详细的分析。 (3)对面向对象编程语言的特性进行了一定的研究,针对 gui 应用编程的特 点,抽象出组件结构和组件类的定义。在提出几个 gui 编程规范的基础上,给出 并实现了 c 到面向对象编程语义映射的具体解决方案5,6,使得 rbgui 支持面向 对象的编程。 (4)将 rbgui 应用到实际的系统中,分析了它的运行状态以及它与其它任务 之间的通信。 硕士学位论文 3 (5)在仿真平台上完成了 rbgui 的性能测试与比较,并在实际的硬件平台上 完成了它的功能测试。 最后总结全文的工作并给出下一步的工作展望。 1.4 论文结构 论文的后续章节按以下方式组织: 第二章分析了几款流行的嵌入式 gui 系统。首先分析了 gui 在嵌入式和实 时系统中的地位和要求;然后简要分析了目前比较流行的几款嵌入式 gui 系统的 主要特点;最后对它们的关键性技术进行了一定的研究。 第三章提出了 rbgui 系统的体系结构。首先分析了移动学习机系统的实际 需求,在充分借鉴流行嵌入式 gui 系统设计特点的基础上,给出了 rbgui 的体 系结构。然后基于 rbgui 分层的结构模型,对每层的关键模块进行了比较详细 的技术研究并给出了 rbgui 的具体实现方法。 第四章提出并实现了 rbgui 系统支持面向对象编程能力的具体解决方案。 首先对面向对象编程语言的特性进行了一定的研究;然后在 gui 编程范畴内,利 用 c 来对面向对象语言的抽象(类)、封装、继承、对象、多态、与消息这几个概 念进行表达,给出了组件结构和组件类的定义,引入了组件类注册机制。在提出 几个 gui 编程规范的基础上,实现了 c 到面向对象编程语义的映射。 第五章分析了 rbgui 作为一个单独的任务在实际系统中的运行状态和通信。 首先对嵌入式操作系统中任务间的通信机制进行了简要的分析,然后描述了 rbgui 的运行时状态,并以 jpeg 解码任务为例说明了它与 rbgui 之间的通信 过程;最后补充介绍了移动学习机系统中的按钮状态转换任务控制流程。 第六章对 rbgui 进行了测试。首先搭建了一个模拟仿真平台并对它移植了 rbgui 和 minigui;然后基于这个平台对两者的性能进行了测试和比较;最后在 实际的物理平台上进行了功能测试。 最后总结全文的工作并给出下一步的工作展望。 面向对象嵌入式 gui 的设计与实现 4 第 2 章 嵌入式 gui 相关研究 2.1 gui 在嵌入式和实时系统中的地位及要求 随着高端消费类电子产品(智能手机、便携式移动多媒体终端等)的广泛应 用,越来越多的开发人员开始关注除操作系统之外的另外一个系统软件组件:嵌 入式图形用户界面支持系统。只要是面向人机交互的嵌入式产品,就涉及到文字 或者图形的输出问题。以手机为例,彩信、wap 以及 3g 应用等,都需要功能完 备的图形用户界面(gui)的支持,以便运行多媒体应用程序、j2me 应用以及 3d 应用软件等等2。另外一个迫切需要轻量级 gui 的系统是工业实时控制系统。 这些系统实时性的要求非常高,它们一般不希望建立在庞大累赘的、非常消耗系 统资源的操作系统和 gui 之上,因此对 gui 性能的要求更高。 目前,许多公司在产品开发中,并没有把 gui 从应用程序中分离开来,gui 由应用程序员维护。这样就导致软件结构复杂,可维护性和可重用性很差。一些 公司则购买市面上比较成熟的嵌入式 gui 系统,可是这些系统为了具有应用上的 通用性,很多时候都是以牺牲性能为代价。如果能够针对具体的应用领域,研发 自己的 gui 系统,就能使整个系统在功能、性能和体积上达到更高的要求,并且 可以根据实际情况进行及时的更新,缩短软件开发周期,进一步降低产品成本, 提高市场竞争力。开发一款成功的嵌入式 gui 产品必须从以下几个方面来考虑: (1)在嵌入式系统上的 gui 应用开发,不像 pc 平台上的应用开发那么容易 和方便。 一是因为设备的可用资源有限 (cpu 运算能力、 静态和动态存储空间等) , 二是因为操作系统提供的底层机制有限。因此,嵌入式 gui 必须尽量提供统一的 接口,屏蔽底层平台的差异,提高自身的可移植性。同时,必须采用优良的设计 结构和高效的算法,在保持 gui 轻量的同时,尽量减少资源占用。 (2)用户通过 gui 与系统进行交互。因此必须从用户的角度出发,研究用 户的实际需求,解决用户与界面交互过程中遇到的问题。这就要求 gui 保持良好 的可配置性和可扩展性。同时,gui 系统必须具有内部模块化程度高,耦合性低 等特点。 (3)gui 必须为二次开发者提供一个友好的开发环境,开发者无需经过艰苦 的学习就能适应开发过程。 2.2 流行嵌入式 gui 系统分析 伴随着嵌入式系统的迅速发展,嵌入式 gui 系统也得到了相应的发展,涌现 硕士学位论文 5 出大量的嵌入式 gui 系统,这些通用的嵌入式 gui 系统因其具有很好的易用性 和强大的功能而被广泛使用。目前比较通用的嵌入式 gui 主要有:micorowindo- ws/nanox、opengui、minigui、qt/embedded 等。 (1)micorowindows/nanox microwindows 由 century software 的 ceo greg haerr 主持开发的一个公开源 码(mpl)的项目。microwindows 的主要目的之一便是运行在嵌入式 linux 上,并 且提供了基于 win32/x 的两套 api 接口。 microwindows 是专门为带小型显示单元的微型设备而设计的。 microwindows 支持许多硬件平台,移植性很强。它具有基于客户/服务器的分层体系结构,提供 了相对完善的图形功能,包括一些高级的功能,比如 alpha 混合,三维支持, truetype 字体支持等9。 但是在 qt/embedded 发布以来,以开放源码形势发展的 microwindows 项目, 基本停滞。microwindows 的图形引擎中许多算法效率低下,并且没有硬件加速能 力。同时由于该项目缺少一个强有力的核心代码维护人员,因此代码质量较差, 参差不齐,影响整体系统稳定性2。 (2)opengui opengui 也是一个公开源码(lgpl)项目。 它在 linux 系统上存在已经很长时 间了。opengui 也分为三层。最低层是由汇编编写的快速图形引擎;中间层提供 了图形绘制 api,包括线条、矩形、圆弧等,并且兼容于 borland 的 bgi api。第 三层用 c+编写,提供了完整的 gui 对象集。由于其基于汇编实现的内核并利用 mmx 指令进行了优化,所以 opengui 运行速度非常快。但也由于它的内核是用 汇编实现的,目前只支持 x86 硬件平台,可移植性较差。在驱动程序一级,可移 植性和性能是矛盾的,开发人员必须取其折衷10。 (3)minigui minigui 由许多自由软件开发人员支持的一个自由软件项目(遵循 lgpl 条 款发布) ,其目标是为基于 linux 的实时嵌入式系统提供一个轻量级的图形用户 界面支持系统。minigui 具有以下一些特点2: 图形抽象层。图形抽象层对顶层 api 基本没有影响,但在一定程度上方便 了 minigui 应用程序的移植、调试等工作。目前包含三个图形引擎,svgalib、 libggi 以及直接基于 linux framebuffer 的 native engine,利用 libggi 时,可在 x window 上运行 minigui 应用程序,并可非常方便地进行调试。与图形抽象层 相关的还有输入事件的抽象层。 minigui现在已经被证明能够在基于 arm、 mips、 strongarm 以及 powerpc 等的嵌入式系统上流畅运行。 多 字 体 和 多 字 符 集 支 持 。 这 部 分 通 过 设 备 上 下 文 ( dc) 的 逻 辑 字 体 (logfont)实现,不管是字体类型还是字符集,都可以方便地进行扩充。应 面向对象嵌入式 gui 的设计与实现 6 用程序在启动时,可切换系统字符集,比如 gb、big5、euckr、ujis。利用 drawtext 等函数时, 可通过指定字体而获得其他字符集支持。 对于一个窗口来说, 同时显示不同语种的文字是可能的。minigui 的这种字符集支持不同于传统通过 unicode 实现的多字符集支持,这种实现更加适合于嵌入式系统。 三个不同架构的版本。最初的 minigui 运行在 pthread 库之上,这个版本适 合于功能单一的嵌入式系统,但存在系统健壮性不够的缺点。在 0.9.98 版本中, 引入了 minigui-lite 版本,这个版本在提高系统健壮性的同时,通过一系列创新 途径,避免了传统 c/s 结构的弱点,为功能复杂的嵌入式系统提供了一个高效、 稳定的 gui 系统。为了适应某些特需场合的需要,引入了 minigui-standalone 版 本。这个版本既不需要多线程的支持,也不需要多进程的支持,可以支持几乎所 有的操作系统11。 (4)qt/embedded qt/embedded 是著名的 qt 库开发商 trolltech 公司发布的面向嵌入式系统的 qt 版本。它是专用于嵌入式平台的 c+应用程序框架。qt/embedded 在各个阶段 都与其对应的 qt 库(另一个应用于 pc 机上的跨平台的应用程序框架,也由 trolltech 公司研发),各版本保持高度兼容,所以在 pc 上开发的应用程序也可以 在稍加修改的情况下,交叉编译后运行在基于 qt/embedded 的嵌入式平台上。此 外,trolltech 还提供了一个名为 qvfb 的程序虚拟出一个 linux framebuffer,在 交叉编译运行到目标板以前,提供了一个便捷的虚拟运行环境12。这样就一定程 度上加快了开发效率,应用程序具有高度的可移植性。 但是,qt/embedded 还有一些问题值得开发者注意2: 1、qt/embedded 是一个 c+函数库,尽管 qt/embedded 声称可以裁剪到最少 630k,但这时的 qt/embedded 库已经基本上失去了使用价值。低的程序效率、大 的资源消耗也对运行 qt/embedded 的硬件提出了更高的要求。 2、qt/embedded 库目前主要针对手持式信息终端,因为对硬件加速支持的匮 乏,很难应用到对图形速度、功能和效率要求较高的实时嵌入式系统当中,比如 控制系统、机顶盒、游戏终端等。 3、qt/embedded 提供的控件集风格沿用了 pc 风格,并不太适合许多手持设 备的操作要求。 4、qt/embedded 的结构过于复杂,很难进行系统裁剪、扩充、定制和移植。 因为上述这些原因,目前所见到的 qt/embedded 的运行环境,几乎是清一色 基于 strongarm、xscale 的 ipaq 或者其它高端手持设备。 2.3 嵌入式 gui 关键技术 嵌入式 gui 设计的目标是:基于操作系统的基础上,为用户提供丰富的图形 硕士学位论文 7 编程接口,使其能够方便快速的编制界面友好的应用程序13。目前均采用分层设 计模型, 消息机制和事件驱动、 窗口 z 序管理等主要技术来构建嵌入式 gui 系统。 2.3.1 分层设计模型 分层体系结构便于抽象、层次结构清晰、层之间的接口功能定义明确。在层 之间可以很方便的插入新的层,并且在不修改层之间的接口定义的情况下,可以 很容易的替换和改写其中的一层或者多层,可以方便的增强和改写系统的功能。 采用分层体系,每一层只需要关心与之相邻的上下两层之间的功能定义和接口, 容易设计和实现,也便于对单层的测试,每一层的可靠性可以有效地提高。而层 之间的接口定义相对简单、方便,有效地方便了系统集成和测试,增强整个系统 的可靠性和稳定性。采用模块化的多层次体系结构可以满足可复用、可裁减、可 移植、可扩展等需求,并且避免了由于重复开发可能引入的错误,从而提高软件 开发的效率13,14。 嵌入式 gui 系统处在总个嵌入式软件系统的中间层,它一般需要运行在特定 的操作系统之上,得到操作系统的支持;它必须为用户提供方便、易用、统一的 调用接口,用户不必关心 gui 实现的细节,就可以编写出良好的图形用户界面的 应用,这是设计 gui 的根本目的。目前的嵌入式 gui 系统大都采用 3 层的设计 模型:图形和输入抽象层15,gui 核心层以及用户接口层。图 2.1 表示了这种分 层的结构模型。 用户接口api gui应用程序 gui的消息驱动和管理模块 图形和输入抽象层(gal和ial) 硬件设备 gui系统 操作系统设备驱动 图 2.1 gui 层次模型 图形和输入抽象层(graphics and input abstract layer,gal 和 ial)提供底 层图形接口以及鼠标和键盘的驱动。 图形和输入抽象层对顶层 api 没有任何影响, 但有效地方便了 gui 自身以及应用程序的移植、调试等功能。抽象层的概念类似 linux 内核虚拟文件系统的概念。它定义了一组不依赖于任何特殊硬件的抽象接 口,所有顶层的图形操作和输入处理都建立在抽象接口之上。而用于实现这一抽 象接口的底层代码称为“图形引擎”或“输入引擎” ,类似操作系统中的驱动程序。 这实际是一种面向对象的程序结构。 gui 核心层是嵌入式 gui 中最重要的组成部分,包括消息和事件驱动机制、 面向对象嵌入式 gui 的设计与实现 8 桌面操作、 定时器操作等几个子模块16,17。 下面简单介绍几个主要子模块的功能。 1、消息和事件驱动机制子模块 这个子模块是整个 gui 系统的调度中心,它主要负责消息的接受、分发和路 由等操作。 2、桌面子模块 桌面是嵌入式 gui 系统中非常重要的一个部分,它通常是一个特殊的最底层 窗口,其它主窗口都覆盖其上。它负责维护一些系统消息和系统中全局的数据。 3、定时器子模块 定时器是 gui 中非常重要的组成部分,当用户需要定时的处理某项操作时就 需要使用到它。通常嵌入式 gui 系统都会提供定时器函数接口,编程人员可以用 它们创建、删除和复位定时器。当创建定时器后,系统将在定时时间到达的时候 产生定时消息。应用程序必须在消息回调函数中接收并处理定时消息。 用户接口层是 gui 系统提供给用户的编程接口, 各种流行的嵌入式 gui 系统 普遍提供类似 win32 的接口。win32 的编程格式固定,程序创建的每一个窗口 都有相关的窗口过程。windows 通过调用窗口过程来给窗口发送消息。窗口过程 根据此消息进行处理,然后将控制返回给 windows。更确切的说,窗口通常是在 “窗口类”的基础上创建的。窗口类标识了处理窗口消息的窗口过程。使用窗口 类可以使多个窗口能够基于同一个窗口类,并且使用同一个窗口过程。编程人员 只 需 要 在 初 始 化 窗 口 类 结 构 , 调 用 系 统 接 口 registerclass 注 册 窗 口 类 及 createwindow 创建窗口对象后,启动消息循环即可18。 2.3.2 消息机制和事件驱动 消息机制的提出,最初是为了解决早期程序设计中基于硬件中断的事件处理 问题。因为中断事件的发生是不可预期的、 “突发”性的,当有多个应用等待并处 理中断事件时,就会出现问题。消息机制可以很好的解决事件驱动的多应用设计 问题,并且可以形成一种处理多个系统之间、系统内部件和部件之间关系的简洁 而且可靠的办法19,20。流行的 gui 编程都有一个重要的概念与之相关,即“事件 驱动编程” 。事件驱动的含义就是,程序的流程不再是只有一个入口和若干个出口 的串行执行线路;相反,程序会一直处于一个循环状态,在这个循环当中,程序 从外部输入设备获取某些事件,比如用户的按键或者鼠标的移动,然后根据这些 事件作出某种的响应,并完成一定的功能,这个循环直到程序接受到某个消息为 止。 “事件驱动”的底层设施,就是常说的“消息队列”和“消息循环”21。 目前的大多数操作系统都采用了消息机制,基本上形成了一种应用设计的结 构风格。消息驱动的应用程序的简单构架可用图 2.221表示。在消息驱动的应用 程序中,计算机外设发生的事件,例如键盘键的敲击、鼠标键的按击等,都由支 硕士学位论文 9 持系统收集,将其以事先的约定格式翻译为特定的消息。应用程序一般包含有自 己的消息队列,系统将消息发送到应用程序的消息队列中。应用程序可以建立一 个消息循环,在这个循环中读取消息并处理消息,直到特定的消息传来为止。一 般地,消息由代表消息的一个整型数和消息的附加参数组成9-12。 外部事件 窗口管理器 主窗口线程消息队列 主窗口线程消息队列 主窗口线程消息队列 消息 循环 窗口过程 图 2.2 消息驱动的应用程序简单构架21 采用消息驱动机制后,各部件之间形成松散的藕合关系,增加了系统部件连 接和集成的灵活性,这是通过消息和响应的隐式调用实现的,从而用户只需关心 产生消息和处理消息。并且 gui 系统变得更加容易维护,升级方便。系统中的任 何部件都可以极为简单地被另一个部件替换,而不需要对接口做任何修改,这一 特点有效地增强了 gui 本身要求的可扩展性22。 2.3.3 窗口管理技术 目前流行的嵌入式 gui 系统都对多窗口提供支持。多窗口系统首先要确保一 个窗口中的绘制输出不会影响到另外一个窗口。 为此, gui 系统一般要利用 z 序 来管理窗口之间的互相剪切关系。根据窗口在 z 序中所处的位置,gui 系统要 计算每个窗口受剪切的区域,即剪切域。通常,窗口的剪切域定义为互不相交的 矩形集合。gui 系统的底层图形引擎在进行输出时,要根据当前输出的剪切域进 行输出的剪切操作。从而保证窗口的绘制输出不会互相影响。 (1)z 序 z 序实际上定义了窗口之间的层叠顺序。说起“z 序”这个名称,实际是相 对屏幕坐标而言的。一般而言,屏幕上的所有窗口均有一个坐标系,即原点在左 上角,x 轴水平向右,y 轴垂直向下的坐标系。z 序就是相对于一个假想的 z 轴 而言的,这个 z 轴从屏幕内指向屏幕外。窗口在这个 z 轴上的值,就确定了其 z 序。z 序值大的窗口,覆盖了 z 序值小的窗口。当然,在程序当中,z 序一般表 示为一个链表。越接近于链表头的节点,其 z 序值就越大23。如图 2.3 所示,3 号窗体 z 序值最大,如果当前屏幕上只有三个窗体,则 1 号窗体要被 2、3 号窗 体剪切,而 2 号窗体要被 3 号窗体剪切,而 3 号窗体则不会被任何窗体剪切。在 这个例子中,1 号窗体的 z 序最小,3 号窗体的 z 序最大。 在多窗口系统中利用 z 序来管理桌面窗口,实现窗口间的切换以及确定消息 面向对象嵌入式 gui 的设计与实现 10 的对应窗口。这些多窗口系统一般都会提供一个消息转换函数 translatemessage 来将某些消息进行转化,如 minigui 就在这个函数体中把击键消息转换为字符消 息(msg_char) 。同样可以在这个函数体中实现窗口间的切换并确定接收消息 的窗口。translatemessage 程序流程图 2.4 所示。 1 2 3 图 2.3 z 序示意图 开始 鼠标左键或触摸屏按下事件 在某个窗口剪切域中且窗口可见 设置消息的窗口句柄 域值并将窗口移动到 z序链的头部 结束 是 是 否 否 图 2.4 translatemessage 程序流程 首先判断传入的消息是否是鼠标左键(或触摸)按下消息,如果是就将检索 z 序链,查看点击点是否在某个窗口中;如果在某个窗口中,并且这个窗口是可 见窗口,那么就将这个窗口移到最顶层,与此同时需要重新计算各窗口的剪切域; 然后设置传入消息的窗口句柄域指向这个窗口,最后调用 dispatchmessage 函数 来调用窗口过程对消息进行处理。 (2)剪切域的计算与维护 在嵌入式平台中由于资源有限,减少 cpu 和内存的使用量成为嵌入式 gui 必须考虑的因素之一。作为实现多窗口系统的一项关键技术剪切域,目前在 硕士学位论文 11 嵌入式平台的多种 gui 中均有应用。剪切域是一个窗口所允许输出的区域,在多 窗口系统中,必须保证一个窗口的绘制输出不能影响到另一个窗口,剪切域就是 在多窗口的 gui 系统中用来解决窗口输出问题的。通过剪切域可以在嵌入式平台 上显示复杂的窗口。为了便于用户的使用以及 gui 下层绘图函数的实现,目前的 嵌入式 gui 系统,如 nano-x,minigui 等中,剪切域往往是由一系列不相交的 矩形所组成的区域,剪切域以外的输出将不被显示到屏幕上。 大多数的嵌入式 gui 剪切域的计算都比较简单,它们将某个窗口全局剪切域 归纳为原有剪切域中排除(exclude)某个矩形而生成的23: 1、窗口的全局剪切域初始化为窗口矩形。 2、当窗口之上有其它窗口覆盖时,则该窗口的全局剪切域为排除新窗口矩形 之后的剪切域。 3、沿 z 序迭代第 2 步,直到最顶层窗口。 当一个窗口被隐藏或销毁时,该窗口之下的所有窗口将受到影响。处理办法 是与排除矩形相反的操作,即包含(include)某个矩形到剪切域中,将被隐藏或 销毁窗口的矩形包含到这些受影响窗口的全局剪切域中。 但是这种简单的实现方法忽略了多窗口操作和切换的特点,低估了剪切域计 算的时间和空间需求,在复杂的多窗口应用中剪切域的计算会消耗大量的系统资 源而降低整个嵌入式系统的效率和稳定性。在文献24中提出了一种名为 awslgr(allwindows share limited global regions,awslgr,窗口共享有限全 局剪切域策略)的剪切域切换算法。这种算法能有效提高窗口切换速度并节省系 统资源。 2.3.4 资源管理技术 对于一个完整的 gui 系统来说,除了有窗口管理,消息机制和事件驱动等核 心要素以外, 字库、 输入法码表、 位图资源 bitmap 等资源的管理也是非常重要的。 由于各种资源之间的共性不大,因此对于它们采用合适的管理方法,将有效的提 高 gui 的整体性能。在资源管理中,各 gui 基本上都是将资源打包成库,通过 宏地址来获得资源数据。只是各种 gui 在实现多字体和多字符集的支持时,采用 不同的策略。比如,对多字符集的支持,qt/embedded 采用 unicode 为基础 实现,这种方法是目前比较常用的方法,是一种适合于通用系统的解决方案。而 minigui 的内部没有采用 unicode 为基础的解决方案。minigui 的策略是,对 某个特定的字符集,在内部使用和该字符集完全一致的内码表示。然后,通过一 系列抽象的接口,提供对某个特定字符集文本的一致分析接口。该接口既可以用 于对字体模块,也可以用来实现多字节字符串的分析功能。如果要增加对某个字 符集
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 集成墙板加盟合同范本
- 快递门面转让合同范本
- 院落租赁合同范本简单
- 房屋安全担保合同范本
- 店面转让合同范本规则
- 白酒包装合同范本
- 长沙商品购房合同范本
- 漳州借款合同范本
- 小区营业餐饮合同范本
- 载货汽车租车合同范本
- 2025广西公需科目考试题库和答案(覆盖99%考题)广西一区两地一园一通道+人工智能时代的机遇
- 消防桌面应急预案方案(3篇)
- 山区救援网2025年灾害救援装备研发趋势分析报告
- 2025年全国中小学校党组织书记网络培训示范班在线考试题库及答案
- 酒店股东消费管理办法
- 【暑假提前学】2025年秋初中语文八年级上册教学课件 第1单元 2《中国人首次进入自己的空间站》
- 图标设计与制作PPT完整全套教学课件
- 贫困户访谈记录
- 道路喷雾降尘方案
- 唐恬人世间的孤勇者与追光者
- 数学基础模块上册课件
评论
0/150
提交评论