基于嵌入式系统的图形界面应用设计.docx
- 文档编号:29793641
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:17
- 大小:330.64KB
基于嵌入式系统的图形界面应用设计.docx
《基于嵌入式系统的图形界面应用设计.docx》由会员分享,可在线阅读,更多相关《基于嵌入式系统的图形界面应用设计.docx(17页珍藏版)》请在冰豆网上搜索。
基于嵌入式系统的图形界面应用设计
基于嵌入式系统的图形界面应用设计
随着嵌入式技术越来越受到重视,嵌入式系统近年来的发展有目共睹,嵌入式系统的应用越来越广泛。
无论是传统的工业监测、机械控制,还是新兴的移动通讯、数字娱乐,嵌入式系统正逐渐走进人们生产生活的方方面面。
在工业检测方面,传统的监控系统主要以单片机为硬件载体进行设计,功能相对单一,可视化及扩展性有限。
随着Linux系统的不断升级换代,现在出现了以ARM芯片为载体,以Linux系统为软件平台设计出的新一代监控系统。
除了能实现原有单片机的功能外,其可视化更强,具备网络通信功能,是一台具
备功能拓展更丰富的微型计算机。
本文将以武汉创维特信息技术有限公司提供的ARM9实验平台为硬件载体,对监测系统的设计进行研究和应用。
系统平台使用的是Linux2.4.18的内核,GUI首次以Qt为底层图形模块,用C++和Qt图形用户界面类库开发图形数据一体化监控平台。
本文先从硬件平台设计入手,根据需求进行电路裁剪,设计了硬件电路。
在软件系统部分设计了Linux操作系统平台,就开发环境的构建,数模转换、CAN总线通讯的驱动程序和应用程序进行编程,最后详述了在Qt下,如何用C++语言设计监控系统图形界面,以软件设计流程为线索介绍了向对象的编程模式、弹出式对话框的设计、带有存储读取功能的excel表格设计、曲线图形的绘制以及如何调用C语言程序实现图形界面里对驱动程序的调用,以实现实时显示功能等。
展示了系统运行效果,并提出了改进意见及对开发板功能拓展升级的思想。
随着嵌入式消费电子产品的普及,例如PDA(个人数字助理)、智能手机、手持信息设备等,嵌入式图形用户界面(GUI:
GraphicalUserInterface)已成为不可缺少的重要组成部分,嵌入式图形用户界面以其丰富的图形图像信息、直观的表达方式与用户交互,被越来越多的嵌入式系统所采用,现已成为当今嵌入式领域的发展热点之一。
Qt的分析、图形用户界面是软件与最终用户的接口,在很大程度上决定着软件的成败。
所以,为应用程序选择图形用户界面开发工具箱是软件开发过程中非常重要的一件事。
在现代加工生产领域,随着自动化程度和生产工艺精度的不断提高,监测监控系统的应用是必不可少的,大量的物理量、环境参数、工艺数据、特性参数需要进行实时检测、监督管理和自动控制。
同时无人操控的应用场合,对远程监控提出了需求。
为了使监控对象的被测参数迅速的反应到监控设备上,以Linux操作系统为软件平台,结合了嵌入式技术的新型监控技术得到了迅速的发展。
伴随着Linux上GUI资源的成熟丌发,以及Linux对各类设备驱动程序的支持,现在的嵌入式监控系统不但能对各类物理量做出准确监测,工程人员还能做出更直观、更友好的人机交互界面;同时随着硬件CPU速率的不断升级换代、软件Linux对网络技术、通信技术等的进一步支持,这种监控系统如同一个集检测、控制、分析诊断等功能于一体的小型工作站,这样的监控系统优势明显。
现今,嵌入式系统以其价格低廉、体积小、针对性强等优势正被广泛应用在各个领域。
1.Linux基础理论
1.1嵌入式技术的发展状况
嵌入式系统主要由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成,它是集软硬件于一体的可独立工作的“器件”。
嵌入式技术的发展,大致经历了四个阶段。
第一阶段是以单芯片为核心的可编程控制器形式的系统,同时具有与监测、伺服、指示设备相配合的功能。
这种系统大部分应用于一些专业性极强的工业控制系统中,一般没有操作系统的支持,通过汇编语言编程对系统进行直接控制,运行结束后清除内存。
第二阶段是以嵌入式CPU为基础、以简单操作系统为核心的嵌入式系统。
这一阶段的操作系统具有一定的兼容性和扩展性,但用户界面不够友好。
第三阶段是以嵌入式操作系统为标志的嵌入式系统。
这一阶段系统的主要特点是:
嵌入式操作系统能运行于各种不同类型的微处理器上,兼容性好:
操作系统内核小、效率高,并且具有高度的模块化和扩展性;具备文件和目录管理、设备支持、多任务、网络支持、图形窗口以及用户界面等功能;具有大量的应用程序接口(API),开发应用程序简单;嵌入式应用软件丰富。
第四阶段是以基于Intemet为标志的嵌入式系统,这是一个正在迅速发展的阶段。
目前大多数嵌入式系统还孤立于Intemet之外,但随着Intemet的发展以及Intemet技术与信息家电、工业控制技术等结合日益密切,嵌入式设备与Intemet的结合将代表着嵌入式技术的真正未来。
随着电脑技术应用领域的不断扩大,无形中促进了嵌入式技术发展,不断提高了嵌入式操作的各种要求。
因此,对嵌入式操作系统的结构、设计、用户界面等诸多方面进行深入研究,将有助于嵌入式系统的应用和发展。
1.2主流嵌入式系统平台的介绍
国外嵌入式操作系统已经从简单走向成熟,主要有Vxwork、QNX、PalmOS、WindowsCE、Linux等。
WindowsCE内核较小,常用于消费电子领域,也能作为一种嵌入式操作系统应用到工业控制等领域。
其优点在于便携性、提供对微处理器的选择以及非强行的电源管理功能。
内置的标准通信能力使WindowsCE能够访问Intemet并收发Email或浏览Web。
除此之外,WindowsCE特有的与Windows类似的用户界面使最终用户易于使用。
WindOWSCE的缺点是速度慢、效率低、价格偏高、开发应用程序相对较难。
Linux是个与生俱来的网络操作系统,成熟而且稳定。
Linux是源代码开放软件,不存在黑箱技术,任何人都可以修改它,或者用它开发自己的产品。
Linux系统是可以定制的,系统内核目前已经可以做得很小。
一个带有中文系统及图形化界面的核心程序也可以做到不足1MB,而且同样稳定。
Linux作为一种可裁减的软件平台系统,是发展未来嵌入设备产品的绝佳资源,遍布全球的众多Linux爱好者又能给予Linux开发者强大的技术支持。
因此,Linux作为嵌入式系统新的选择,是非常有发展前途的。
WindRiver公司的VxWorks是较为有特色的一种实时操作系统。
VxWorks支持各种工业标准,包括POSIX、ANSIC和TCP/IP网络协议。
VxWorks运行系统的核心是一个高效率的微内核,该微内核支持各种实时功能,包括快速多任务处理、中断支持、抢占式和轮转式调度。
微内核设计减轻了系统负载并可快速响应外部事件。
在美国宇航局的“极地登陆者”号、“深空二号”和火星气候轨道器等登陆火星探测器上,就采用了VxWorks,负责火星探测器全部飞行控制,包括飞行纠正、载体自旋和降落时的高度控制等,而且还负责
数据收集和与地球的通信工作。
目自i『在全世界装有VxWorks系统的智能设备数以百万计,其应用范围遍及互联网、电信和数据通信、数字影像、网络、医学、计算机外设、汽车、火控、导航与制导、航空、指挥、控制、通信和情报、声纳与雷达、空间与导弹系统、模拟和测试等众多领域。
目前,大部分操作系统平台还掌握在外国公司的手中,考虑到Linux是一款免费开源的操作系统内核,尽管开发过程繁琐,但成本低,扩展性强,同时Linux已经能够满足大多数情况下的实时性要求,所以此监控系统最后选择Linux平台作为开发基础。
1.3嵌入式Linux操作系统介绍
操作系统就是让裸机变为可用的计算机系统。
它管理系统的硬件资源,并为应用程序进行开发和执行提供基础。
如果没有操作系统,每个程序就不得不为『F在使用的所有硬件提供驱动程序,这对开发者来说太难了。
对操作系统的剖析取决于其类型。
Linux和大多
数UNIX的变种都是单模块系统,即一个单独的目标文件组成。
很多过程编译链接在一起就形成了操作系统。
过程fnJ的交互方式决定了模块系统的内部结构。
在Linux中,操作系统划分为内核空间和用户空间两部分。
使用操作系统用户空间的用户,他将开发或者使用应用程序。
用户空间不能直接访问内核,从而不能访问硬件资源,
但可以通过系统调用来访问。
内核空问是硬件管理功能发生作用的区域,在内核中,系统调用内核中的其他过程,这些过程可以对更细的功能进行操作。
来自设备驱动的函数和内核子系统的函数是内核过程的子集,对用户不可见。
设备驱动程序为系统调用或内核子系统的访问提供了定义明确的接口函数112。
正是因为如此,我们要开发某种功能的产品时,需要移植调用该内核功能的设备驱动程序,从而为上层应用程序丌发打下基础。
下图显示了Linux内核功能的划分结构:
Linux内核功能结构图
1.4Linux驱动程序介绍
设备驱动程序是Linux系统内核同外围设备交互的媒介,设备驱动程序做为系统内核的一部分,它把外围的设备完整的封装了起来,使某个特定的硬件响应一个定义良好的内部编程接口,这些接口完全隐藏了设备的工作细节。
这样在应用程序丌发者看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作,设备驱动程序主要完成以下的功能:
对设备初始化和释放、把数据从内核传送到硬件和从硬件读取数据、读取应用程序传送给设备文件的数据和回送应用程序请求的数据。
Linux系统将设备分成三种基本类型,每个模块通常实现其中某一类:
字符模块、块模块、网络模块。
通常要为每个新功能建一个不同的模块,从而实现良好的伸缩性和扩展性。
这三种类型如下:
(1)字符设备:
字符设备是指能够像字节流(比如文件)一样被访问的设备,如字符终端(/dev/console)和串121(/dev/ttysO)以及类似设备。
字符设备对应文件系统中的节点,用户则通过此文件节点访问和控制设备。
(2)块设备:
块设备和字符设备一样可以通过文件系统节点来进行访问,Linux允许应用程序像字符设备那样读写块设备。
(3)网络接口:
任何网络设备都要经过一个网络接口,即一个能够和其它主机交换数据的设备。
通常接13是个硬件设备,但也可能是个纯软件设备,比如回环(1OOpback)接El。
Linux
访问网络接口的方法是分配一个唯一的名字。
2.ARM9的基本架构设计
2.1ARM9处理器简介:
ARM9系列处理器是英国ARM公司设计的主流嵌入式处理器,主要包括ARM9TDMI和ARM9E-S等系列。
新一代的ARM9处理器,通过全新的设计,采用了更多的晶体管,能够达到两倍以上于ARM7处理器的处理能力。
这种处理能力的提高是通过增加时钟频率和减少指令执行周期实现的。
因此,ARM9和ARM7相比具有显著的优点,具体表现在:
1.时钟频率的提高:
ARM7处理器采用3级流水线,而ARM9采用5级流水线,如图1、2、3所示。
增加的流水线设计提高了时钟频率和并行处理能力。
5级流水线能够将每一个指令处理分配到5个时钟周期内,在每一个时钟周期内同时有5个指令在执行。
在同样的加工工艺下,ARM9TDMI处理器的时钟频率是ARM7TDMI的1.8~2.2倍。
2.指令周期的改进:
指令周期数的改进最明显的是loads指令和stores指令。
从ARM7到ARM9这两条指令的执行时间减少了30%。
指令周期的减少是由于ARM7和ARM9两种处理器内的两个基本的微处理结构不同所造成的。
ARM9有独立的指令和数据存储器接口,允许处理器同时进行取指和读写数据。
这叫作改进型哈佛结构。
而ARM7只有数据存储器接口,它同时用来取指令和数据访问。
5级流水线引入了独立的存储器和写回流水线,分别用来访问存储器和将结果写回寄存器。
以上两点实现了一个周期完成loads指令和stores指令。
当指令需要的数据因为以前的指令没有执行完而没有准备好就会产生管道互锁。
当管道互锁发生时,硬件会停止这个指令的执行,直到数据准备好为止。
虽然这种技术会增加代码执行时间,但是为初期的设计者提供了巨大的方便。
编译器以及汇编程序员可以通过重新设计代码的顺序或者其他方法来减少管道互锁的数量。
ARM9和ARM7的分枝指令周期是相同的。
而且ARM9TDMI和ARM9E-S并没有对分枝指令进行预测处理。
2.2ARM9处理器基本架构及特点:
1.ARM9处理器基本架构图:
以ARM9E-S为例介绍ARM9处理器的主要结构及其特点。
ARM9E-S的结构如图4所示。
其主要特点如下:
(1)32bit定点RISC处理器,改进型ARM/Thumb代码交织,增强性乘法器设计。
支持实时(real-time)调试;
(2)片内指令和数据SRAM,而且指令和数据的存储器容量可调;
(3)片内指令和数据高速缓冲器(cache)容量从4K字节到1M字节;
(4)设置保护单元(protcctionunit),非常适合嵌入式应用中对存储器进行分段和保护;
(5)采用AMBAAHB总线接口,为外设提供统一的地址和数据总线;
(6)支持外部协处理器,指令和数据总线有简单的握手信令支持;
(7)支持标准基本逻辑单元扫描测试方法学,而且支持BIST(built-in-self-test);
(8)支持嵌入式跟踪宏单元,支持实时跟踪指令和数据。
3.Qt图形开发过程
3.1Qt简介
关于Qt,Qt/E,QtopiaCore,Qtopia这些版本之间的区别和联系,似乎没有看到一个比较有价值的讨论,本人现在总结一下个人的理解:
Qt泛指Qt的所有桌面版本,比如Qt/X11,QtWindows,QtMac等。
由于Qt最早是在Linux中随着KDE流行开来的,因此通常很多人说的Qt都指用于Linux/Unix的Qt/X11。
Qt/E(Qt/Embedded)是用于嵌入式Linux系统的Qt版本。
Qt/E去掉了XLib的依赖而直接工作于FrameBuffer上,因而效率更高,但它并不是Qt的子集,而应该是超集,部分机制(如QCOP等)不能用于Qt/X11中。
Qtopia是一个构建于Qt/E之上的类似桌面系统的应用环境,目前看来就是QtopiaPhoneEditon(QPE)。
相比之下,Qt/E是基础类库。
QtopiaCore:
就是原来的Qt/E,大概从Qt4开始改名,把QtopiaCore并到Qtopia的产品线中去了。
但实际上QtopiaCore就相当于原来的Qt/E,仍然作为基础类库。
(1)Qt/Embedded和Qtopia体系结构
Qt/Embedded是Trolltech公司开发的面向嵌入式系统的Qt版本,与X11版本的Qt在最大程度上接口兼容,采用帧缓存(framebuffer)作为底层图形接口。
Qt/Embedded类库完全采用C++封装,并且有着丰富的控件资源以及较好的可移植性,大范围的Qt/EmbeddedAPI可用于多种开发项目。
Qt/Embedded的实现结构如下图所示:
Qt/Embedded的底层图形引擎基于framebuffer。
framebuffer是一种驱动程序接口,它将显示设备抽象为帧缓冲区[4]。
该驱动程序的设备文件一般是/dev/fb0、/dev/fb1等。
对用户而言,它和/dev下的其他设备没有什么区别,用户可以把framebuffer看成一块内存,既可以从这块内存中读取数据,也可以向其中写入数据,而写操作立即反应在屏幕上。
为运行Qt/Embedded,嵌入式Linux内核要支持framebuffer。
Qt/Embedded是Qt的面向嵌入式应用的简化版本,它包括一组完备的GUI类、操作系统封装、数据结构类、功能类和组合类。
大部分Qt的应用程序可以经过简单的编译与重设窗口大小移植到Qt/Embedded。
Qtopia是基于QT/Embedded开发的一个嵌入式的窗口系统和应用程序集,如地址本、图像浏览、Media播放器等,还包括娱乐和配置工具,广泛用于PDA等掌上设备。
Qtopia平台由Qtopia库(Qt/E,libqpe,libqtopia1,qtopiapim)和Qtopiaserver/laucher组成。
Qtopiaserver/laucher是控制窗口系统、进程间通信、发起所有应用和其他核心任务的主要服务程序。
Qt/Embedded的实现结构图
(1)Qt/Embedded应用程序的实现
Qtopia是一个基于QT/Embedded开发的一个嵌入式的桌面环境和应用程序集,可以方便地在Qtopia桌面环境中添加用户应用程序或者对桌面进行配置。
为了添加用户应用程序,需要在Qtopia/apps/Application目录下建立一个.desktop的桌面文件,该文件指明了桌面文件的图标以及应用程序的入口点。
应该注意的是为了让新的应用程序在Qtopia桌面环境中运行,应用程序必须使用QT提供的图形库进行编译。
下面以移植嵌入式的web浏览器konqueror为例,说明添加新的应用程序的过程。
下载konqueror源代码,对其进行交叉编译。
为了支持中文显示和flash,还需要进行必要的源代码修改,并且加入相应的插件。
将konqueror.png图标文件拷贝到在/opt/Qtopia/pic/下。
将konqueror可执行文件放于/opt/konqueror/下,然后在Qtopia/apps/Application目录下建立konqueror.desktop文件,具体内容可参考qtopia自带的.desktop文件。
需要注意的是konqueror.desktop的Exec项应指明可执行文件的具体位置。
例如:
Exec=/opt/konqueror/bin/konqueror
导出konqueror的运行环境变量,就可以直接在桌面上点击其图标浏览网页了。
Qt应用程序执行过程图
3.2QtCreator的ARM开发环境的建立
3.2.1硬件环境:
虚拟机Fedora12(建议安装VmwareTools,详细安装方法参照Vmware帮助文档),USB串口,minicom终端。
(minicom经常打不开ttyUSB0设备,我的解决方法是,打不开时就将USB串口移除,运行minicom,然后再接上USB串口,此时运行minicom一般都能打开设备)
3.2.2软件环境:
1.用于Linux/X1132位 的 QtCreator1.3.1 二进制软件包qt-creator-linux-x86-opensource-1.3.1.bin
2.用于嵌入式 Linux 的 Qt 库 4.6.2包qt-everywhere-opensource-src-4.6.2.tar.gz
3.2.3安装方法
1.将 qt-everywhere-opensource-src-4.6.2.tar.gz 压缩包解压为3份,分别编译 PC ,嵌入式 x86 和 arm 三个版本。
我在root目录下建立tmp文件夹,将qt-everywhere-opensource-src-4.6.2.tar.gz直接解压后复制2分,分别命名为pc、x86、arm。
(1)编译 PC 版:
进入pc目录
#./configure
#gmake
#gmakeinstall
安装过程比较长,没有碰到过错误。
(2)编译嵌入式x86版:
进入x86目录
#./configure-embeddedx86-qt-gfx-qvfb-qt-kbd-qvfb-qt-mouse-qvfb
#gmake
#gmakeinstall
安装过程比较长,没有碰到过错误。
编译安装PC版中的 qvfb:
进入pc/tools/qvfb/目录
#make
编译完毕,将pc/bin目录下的qvfb文件复制到/usr/local/Trolltech/QtEmbedded-4.6.2/bin目录。
(3)编译嵌入式arm版(需要 arm-linux-gcc 的支持):
使用友善自带的ARM-LinuxGCC4.3.2编译完了,程序移植到开发板上后,出现SegmentationFault错误,按原文,使用4.1.2正常。
直接将arm920t-eabi.tgz解压缩到根目录,不可以像文章中说的那样“我把它放在:
/usr/local/arm/4.1.2/ ”,最起码我放过去后出错了。
把编译器路径加入系统环境变量,运行命令:
#gedit/root/.bashrc
编辑/root/.bashrc文件,在最后一行加上 exportPATH=/opt/toolchains/arm920t-eabi/bin:
$PATH
编译tslib对触摸屏支持:
下载,tslib1.4.tar.gz,解压后:
#./configure--prefix=/usr/local/tslib/--host=arm-linuxac_cv_func_malloc_0_nonnull=yes
#make
#makeinstall
我下载的包解压后没有configure文件,需要运行autogen.sh后才能生成。
设置环境变量,以便编译时找到相关的库:
#exportCPLUS_INCLUDE_PATH=/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/include/c++:
/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/include/c++/arm-none-linux-gnueabi
#exportPATH=/opt/toolchains/arm920t-eabi/bin:
$PATH
修改qt-everywhere-opensource-src-4.6.2/mkspecs/qws/linux-arm-g++/qmake.conf 文件(添加lts参数):
QMAKE_CC =arm-linux-gcc-lts
QMAKE_CXX =arm-linux-g++-lts
QMAKE_LINK =arm-linux-g++-lts
QMAKE_LINK_SHLIB =arm-linux-g++-lts
(4)移植
我是通过NFS启动的系统,具体操作可以参照友善的手册,在
将Fedora12上 /usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib 中的所有文件复制到/opt/FriendlyARM/mini2440/root_qtopia/usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib目录中(对应目录复制,相当于复制到了开发板对应目录中),其实需要的时候可以裁剪,看原文吧。
将Fedora12上 /usr/local/tslib 中的库复制到/opt/FriendlyARM/mini2440/root_qtopia/usr/local中。
即将/usr/local/tslib下的所有文件复制到/opt/FriendlyARM/mini2440/root_qtopia/usr/local文件夹下。
如果运行时还缺少其他的库,复制方法相同。
也可以使用arm-angstrom-linux-gnueabi-readelf-a 程序名 |grep"Share",命令查看需要哪些共享库,一起复制过去。
为支持触摸屏,开机自动设置环境变量,在2440的 /etc/profile中追加:
export
LD_LIBRARY_PATH=/usr/local/lib:
$QTDIR/lib:
$LD_LIBRA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 嵌入式 系统 图形界面 应用 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)