当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]随着后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

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

台湾新竹 – 2024年4月23日 – 著名的微控制器供货商新唐科技公司,与全软件开发生命周期提供跨平台解决方案的全球软件公司Qt Group宣布深化合作,扩展新唐科技人机界面(HMI)平台支持「Qt for MCUs」...

关键字: 微控制器 嵌入式系统 MCU

随着物联网、嵌入式系统以及微控制器技术的飞速发展,微控制器已成为众多智能设备和系统不可或缺的核心组件。而微控制器的正常工作,离不开烧录器的精准操作。C8051F021烧录器,作为一款高效、稳定、易用的微控制器烧录工具,在...

关键字: c8051f021烧录器 联网 嵌入式系统

为增进大家对嵌入式系统的认识,本文将对嵌入式系统、嵌入式系统的特点予以介绍。

关键字: 嵌入式 指数 嵌入式系统

2024年4月18日,国民技术第四代可信计算芯片NS350 v32/v33系列产品正式发布并开始量产供货。NS350 v32/v33是一款高安全、高性能、超值可信密码模块2.0 (TCM 2.0)安全芯片,适用于PC、服...

关键字: PC 服务器平台 嵌入式系统

2024年,嵌入式系统将走向何方?如何才能走在趋势的前沿?从工厂到家电,从医院里昂贵的医疗设备,到随处可见的可穿戴设备,我们身边的联网设备越来越多,生活更加绿色低碳,嵌入式系统功不可没。ST于3月19日成功举办STM32...

关键字: 嵌入式系统 可穿戴设备

在嵌入式系统开发、调试和测试过程中,J-Link作为一种高效的调试工具,为开发者提供了极大的便利。然而,要想充分发挥J-Link的功能,首先需要正确安装其驱动程序。本文将详细介绍J-Link驱动的安装过程,并深入解析其中...

关键字: jlink 嵌入式系统 嵌入式开发

随着科技的飞速发展,单片机和嵌入式系统在现代电子设备中的应用越来越广泛。它们不仅提高了设备的智能化水平,还推动了各行各业的创新与发展。在单片机和嵌入式系统的开发中,编程语言的选择至关重要。本文将深入探讨单片机和嵌入式系统...

关键字: 单片机 嵌入式系统 电子设备

Windows Embedded Compact 7(简称WinCE)是一种专为嵌入式系统设计的操作系统,具有体积小、效率高、可定制性强的特点。在WinCE中设置自动运行软件,通常是为了满足设备在启动后自动执行特定任务的...

关键字: 嵌入式系统 软件 操作系统

【2024年3月25日,德国慕尼黑和瑞典瓦尔贝格讯】不同汽车的独特性给汽车零部件供应商和OEM厂商等带来了挑战,因为每辆车的驾驶方式、驾驶地点、驾驶者、设计、用途以及道路和交通状况都是独一无二的。为保证每辆汽车都能正常运...

关键字: AI 机器学习 嵌入式系统

GD32F303作为一款先进的微控制器,在嵌入式系统领域有着广泛的应用。本文旨在深入探究GD32F303的发布时间,并分析其背后的技术背景和市场环境。通过对相关资料的梳理和分析,本文揭示了GD32F303发布的历史背景、...

关键字: GD32F303 微控制器 嵌入式系统
关闭
关闭