当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]随着后PC时代的到来,嵌入式系统的性能有了大幅度的提高,应用范围也越来越广,当初的一些简单的人机交互接口已经无法满足人们的要求,在嵌入式系统中也逐渐出现了图形用户

随着后PC时代的到来,嵌入式系统的性能有了大幅度的提高,应用范围也越来越广,当初的一些简单的人机交互接口已经无法满足人们的要求,在嵌入式系统中也逐渐出现了图形用户界面(Graphic User Interface,GUI),特别是在一些消费类产品中。嵌入式系统中的GUI就是在嵌入式系统中为特定的硬件设备或环境而设计的图形用户界面系统,由于受到目前嵌入式系统本身特点的影响,并受其发展限制,所以嵌入式系统中的GUI应该有如下特点[1]:

1)占用的存储空间以及运行时占用资源少。

2)运行速度以及响应速度快。

3)可靠性高。

4)便于移植和定制。

Linux有开放的源码、高效稳定的内核、良好的开发环境以及支持多种硬件平台等特点,而且由于Linux的可配置性和模块化,一个Linux内核经过配置和裁减可以只占用几百K左右的存储空间,使其在嵌入式系统中也得到广泛应用[2]。

QT/Embedded是一个用于嵌入式系统的图形用户界面系统,能够高效、稳定地运行于嵌入式 Linux系统下,能为用户提供可靠的交互功能。

本文就旨在于对这样的嵌入式GUI QT/Embedded应用中的一些关键问题进行研究。

1 嵌入式Linux操作系统

嵌入式操作系统目前主要有Vxwork、pSOS、Palm OS、Neculeus 和 Windows CE。但这些专用操作系统都是商业化产品,其价格昂贵,不适合低端嵌入式产品开发。而且,源代码的封闭性在很大程度上限制了开发者的开发。嵌入式 Linux操作系统弥补了这些不足,Linux操作系统是遵循GPL公约,并且有运行稳定、源码开放的特点,被认为是未来嵌入式操作系统的最佳选择。

2 QT/Embedded的特点和结构

QT/Embedded是著名的QT库开发商Trolltech公司开发的面向嵌入式系统的Qt版本[3]。许多基于Qt的 X Window程序可以非常方便地移植到Qt/Embedded上,仅采用Framebuffer作为底层图形接口。Qt/Embedded类库完全采用 C++封装。丰富的控件资源和较好的可移植性是Qt/Embedded最为优秀的一方面,使用X下的开发工具Qt Designer可以直接开发基于Qt/Embedded的UI(用户操作接口)界面。下图为Qt/Embedded的实现结构。

 


图1 Qt/Embedded的实现结构

Qt/Embedded在代码设计上,巧妙地利用了C++的面向对象机制,如继承、多态、模板等,具体实现非常灵活。

3 关键技术

3.1 Qt/Embedded的图形引擎实现

Qt/Embedded的底层图形引擎基于Framebuffer。Framebuffer是在Linux内核架构版本2.2以后新推出的标准显示设备驱动接口。采用mmap系统调用,可以将Framebuffer的显示缓存映射为可连续访问的一段内存空间。由于目前比较高级的ARM体系的嵌入式 CPU中大多集成了LCD控制模块,LCD控制模块一般采用双DMA控制器组成的专用DMA通道。其中一个DMA可以自动从一个数据结构队列中取出并装入新的参数,直到整个队列中的DMA操作都已完成为止。另外一个DMA与画面缓冲区相关。虽然使用了双DMA,但这两个DMA控制器的交替使用对于CPU来说是不可见的,CPU所获得只是由两个DMA组成的一个通道而已。

Framebuffer驱动程序的实现分为两个方面:一方面是对LCD及其相关部分的初始化,包括缓冲区的创建和对DMA通道的设置;另外一方面是对画面缓冲区的读写,有read、write、lseek等系统调用接口。对于将画面缓冲区的内容输出到LCD显示屏上,由硬件自动完成,对于软件来说是透明的。当对于DMA通道和画面缓冲区设置完成后,DMA开始正常工作,并将缓冲区中的内容不断发送到LCD上。这个过程是基于DMA对于LCD的不断刷新。

在Qt/Embedded中,Qscreen类是抽象出的底层显示设备基类,它声明了对于显示设备的基本描述和操作方式,如打开、关闭、获得显示能力等。另外还有一个重要的基类是QGfx类,此类抽象出对于显示设备的具体操作接口,如选择画刷、画线、画矩形等。这两个基类是Qt/Embedded图形引擎的底层抽象,其中所有具体函数基本上都是虚函数,Qt/Embedded对于具体的显示设备,如Linux的Framebuffer、Qt Virtual Framebuffer做的抽象接口类全都由此继承并重载虚函数实现。


图2 Qt/Embedded中鼠标设备抽象派生结构

3.2 Qt/Embedded的事件驱动

Qt/Embedded中与用户输入事件相关的信号是建立在对底层输入设备的接口调用。Qt/Embedded中的输入设备主要有鼠标和键盘设备。在2.x和3.x版本系列中鼠标设备的抽象基类为QWSMouseHander,从该类又重新派生出一些具体的鼠标类设备的实现类,鼠标类设备的派生结构如图2。键盘类设备接口的基类QWSKeyboardHandler,移植时需要根据键盘驱动程序从该类派生出实现类,实现键盘事件处理函数 processKeyEvent(),并在QWSServer::setKeyboardHandler函数中注册自已的键盘类设备。其中对于点击键码定义在QT/Embedded的命名空间src/kernel/qnamespace.h中。

3.3 QT/Embedded的移植

本文使用的系统采用320*240分辨率的TFT LCD和S3C2410内部LCD控制模块为显示设备,S3C2410有内部触摸屏控制器和USB Host控制器,可采用USB接口的鼠标、键盘或触摸屏作为输入设备。Linux操作系统内核为2.4.18。

Qt/Embedded的移植首先要准备好要使用的源文件。需要准备的源文件有:qt-x11-2.3.2.tar.gz,提供qvfb虚拟缓冲帧工具,uic用户界面编译器和Designer Qt应用程序设计工具等。Qt/Embedded直接写入帧缓冲,而在宿主机上则是通过qvfb(vitural framebuffer)来模拟帧缓冲。qvfb是X窗口用来运行和测试Qtopia应用程序的系统程序,允许在桌面上开发Qt嵌入式程序,而不需要在命令台和X11之间来回切换。qvfb使用了共享存储区域(虚拟的帧缓冲)来模拟帧缓冲并且在一个窗口中模拟一个应用,显示的区域被周期性的改变和更新。通过指定显示设备的宽度和颜色深度,虚拟出来的缓冲帧和物理的显示设备在每个像素上保持一致。这样在每次调试应用时不需要总是刷新嵌入式设备的Flash存储空间,从而加速了应用的编译、链接和运行周期。qt-embedded-2.3.7.tar.gz和qt-embedded- 2.3.7.tar.bz2,提供Qt库的支持。qtopia-free-1.7.0.tar.gz,提供应用程序开发包桌面环境。tmake- 1.11.tar.gz,用于生成和管理Makefile。[!--empirenews.page--]

Qt/Embedded到目标设备的移植也需要相应的交叉编译工具链,交叉编译就是在主机平台编译器链接产生运行于目录平台的可执行文件,可采用Cygwin平台下的arm-linux-gcc.exe系列编译器。

3.4 添加应用到qtopia

Qtopia即QPE(Qt Palmtop Environment)是由著名的Trolltech公司基于Qt的嵌入式版本Qt/Embedded库的基础上,专门针对PDA、智能手机这类运行嵌入式Linux的移动计算设备和手持设备所开发的开放源码的一套应用程序包和开发库。移植好Qt/Embedded和Qtopia后,需要将编写的应用程序添加到Qtopia。要为开发的应用程序建立好一个图标文件,然后要重新交叉编译Qtopia,建立.desktop文件,将其保存在 qtopia/apps/applications目录下。最后制作新的文件系统映像文件,把新建的应用程序文件加入其中,若要使QPE能够自动运行,需要对嵌入式系统上的Linux启动过程进行修改,主要是要修改etc/profile里的脚本文件。

4 结论

QT能稳定、可靠地运行于Linux 系统下,并且可以快速构建一个可视化嵌入式软件系统。本文的创新之处是分析了嵌入式Linux+QT/Embedded图形系统的嵌入式图形软件开发中的关键技术,这种开发模式可以大大缩短嵌入式可视化软件的开发周期。

参考文献:

[1] 纪竞舟,付宇卓.基于ARMLINUX的嵌入式GUI的研究和移植[J].计 算 机 仿 真,2004,22(3):224-238

[2]吴姣梅,李红艳等.改善嵌入式Linux实时性能的方法研究[J].微计算机信息,2006,1:72-74

[3] Xterm(中国)软件技术有限公司.Qt程序设计[M].北京:清华大学出版社,2002

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭