




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
移动设备网络视频播放器的实现第一章 概 述1.1课题背景随着嵌入式系统应用的逐渐普及,为保证嵌入式系统的顺利运行,嵌入式软件得到了快速发展,成为软件业的一股新生力量。嵌入式软件与嵌入式系统是密不可分的,嵌入式系统是“控制、监视或者辅助设备、机器和车间运行的装置”,就是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成,用于实现对其他设备的控制、监视或管理等功能。而嵌入式软件就是基于嵌入式系统设计的软件,它也是计算机软件的一种,同样由程序及其文档组成,可细分成系统软件、支撑软件、应用软件三类,是嵌入式系统的重要组成部分。随着信息技术以及互联网飞速发展普及,3C(计算机、通讯、消费电子)合一的加速,嵌入式设计已经成为工业现代化、智能化的必经之路,嵌入式产品已经深入到各行各业。嵌入式接入设备是数字化时代的一大主流产品,嵌入式软件已经成为数字化产品的核心。嵌入式软件大量应用于家用市场、工业市场、商业市场、通讯市场和国防市场。近几年来,信息电器迅速发展,也为嵌入式软件的发展起到推波助澜的作用。彩电、DCD、手机、MP3/MP4、掌上电脑、汽车等都是潜在的信息电器。信息电器平台与通用操作系统、数据库不同,不存在国外软件厂商垄断市场的现象,这一领域已成为中国软件业的突破口。随着Linux操作系统本身的不断完善,嵌入式Linux已经广泛应用到手机、PDA以及其他移动终端产品中。嵌入式Linux以其开放的源码,良好的适应性,较低的成本和很好的技术移植在手机等移动终端产品的操作系统领域,获得了越来越多的青睐。1.2移动终端简介移动终端或者叫移动通信终端是指可以在移动中使用的计算机设备,广义的讲包括手机、笔记本、POS机甚至包括车载电脑。但是大部分情况下是指手机或者具有多种应用功能的智能手机。随着网络和技术朝着越来越宽带化的方向的发展,移动通信产业将走向真正的移动信息时代。另一方面,随着集成电路技术的飞速发展,移动终端的处理能力已经拥有了强大的处理能力,移动终端正在从简单的通话工具变为一个综合信息处理平台。这也给移动终端增加了更加宽广的发展空间。现代的移动终端已经拥有极为强大的处理能力(CPU主频已经接近1)、内存、固化存储介质以及像电脑一样的操作系统。是一个完整的超小型计算机系统。可以完成复杂的处理任务。移动终端也拥有非常丰富的通信方式,即可以通过,等无线运营网通讯,也可以通过无线局域网,蓝牙和红外进行通信。随着移动终端硬件技术的发展以及3G网络建成使得通讯速率的提高。今天的移动终端不仅可以通话,拍照、听音乐、玩游戏,而且可以在线播放电视及点播电影、上传及下载多媒体信息,成为移动办公和移动商务的重要工具。1.3嵌入式在移动终端中的应用在移动终端发展史中,随着通信技术的发展,具有不同功能的应用软件可以运行在移动终端上为人们提供各种各样的服务,但是没有统一的系统结构框架使得这些应用软件的互动性非常差。于是移动终端产商们便开始寻求一种基于“开放”的操作系统的手机,所谓“开放”指其所有的API(应用程序接口)应该是公开并且受到广泛支持。当时所面临的选择有Symbian的EPOC平台,Palm/OS以及微软的WIN CE。随着研究的深入,Linux的嵌入式版本开始受到青睐并扩展其市场。从20XX年至20XX年,嵌入式Linux在嵌入式操作系统的市场份额迅速增长了一倍左右,从而成为嵌入式OS中的重要一员。嵌入式Linux在移动终端中有如此中大作用得益于其如下优势:(1)Linux属于开放的操作系统,它自身的技术文档甚至源代码都是开放的,因而在学术领域受到格外青睐,使得它对新技术,新协议有良好的适应性.(2)由于Linux和Unix之间的相似性,使得许多对Unix熟悉的开发人员能够很快在相似的基于嵌入式Linux开发环境中进行开发工作。另外, 由于Linux源码的开放性使得代码移植和重用变得相当普遍,基于嵌入式Linux平台的开发产品往往只花费较低的成本就能有很好的质量。这对于注重开发成本的公司无疑具有极大的诱惑力。(3)Linux提供了良好的安全性能和并行处理能力。Java语言在移动领域正逐渐成为主流的开发语言,而实验表明,在相同的硬件平台上,Java虚拟机在Linux上能取得比Windows CE上更好的性能值。因此Java+Linux成为现在的时尚搭配。当然,Linux在价格上的优势也很关键。尽管Linux并非全免费,但和其他商用操作系统相比,它还是占尽价格优势。1.4课题理论与实际意义本课题旨在研究在嵌入式平台上实现网络播放器的网络播放,在FTP网络协议环境下测试网络播放器的播放效果。本课题所涉及的理论内容有嵌入式系统、linux系统内核、根文件系统、FTP网络协议、ARM应用软件移植、QT应用软件编程。通过这些理论知识的整合在嵌入式平台上实现播放器网络播放并且注重编程规范形成一套标准的项目开发流程。就如课题背景所言,由于嵌入式系统软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。正是由于嵌入式的这些优点使得当今移动设备生产商如此青睐于嵌入式系统。加之3G网络的发展,通讯速率届时将大幅提升,应广大移动终端用户的要求,移动终端多媒体化将是发展的主流趋势。通过在嵌入式平台上实现网络播放器方案的研究有助于为开发一种低成本、高效率的移动设备网络播放器提供有效的技术支持。并且由于QT是面向对象的、跨平台的用户图形界面开发软件,它具有良好的移植性,通过QT编写应用程序图形界面为嵌入式应用程序图形界面提供了一种很好的解决方案。1.5本文主要内容与组织结构第二章 硬件平台及开发流程2.1开发平台介绍本课题采用的硬件开发平台为由北京博创兴业科技有限公司开发的基于ARM体系结构的UP-CUP 2410-S 平台。UP-CUP 2410-S 平台的CPU为ARM920T内核的三星S3C2410 芯片,由于有MMU可以运行标准的ARM-LINUX内核。 除此之外UP-CUP 2410-S开发平台带有丰富的外围开发部件和完善的开发手册,使得这一开发平台非常适合嵌入式教学和进行嵌入式软件开发。图2-1 UP-TECH 2410嵌入式开发板2.1.1开发平台硬件配置UP-TECH S2410/P270 DVP的硬件配置如表2-1-2所示表 2-1-2 UP-TECH S2410/P270 DVP的硬件配置4配置名称型号说明CPUARM920T结构芯片三星S3c2410X工作频率203MHzFLASHSAMSUNG K9F120864M NANDSDRAMHY57V561620ATH32M2=64MEtherNet网卡DM9000AE10/100M自适应LCDLQ080V3DG018寸16bit TFT触摸屏SX-080-W4R-FBFM7843驱动USB 接口4个HOST /1个DEVICE由AT43301构成USB HUBUART/IrDA2个RS232,1个RS485,1个IrDA AD8路10位内部AD控制器3个电位器控制输入AUDIOIIS总线,UDA1341芯片 44.1KHz音频扩展卡插槽168Pin EXPORT总线直接扩展GPS_GPRS扩展板SIM SIM300 GPRS模块,TrimbleS GPS 支持双道语音通信IDE/CF卡插座笔记本硬盘,CF卡 PS2 PC键盘和鼠标由ATMEGA8单片机控制IC卡座AT24CXX系列由ATMEGA8单片机控制LED8x8矩阵LED及2个LED数码管由总线控制VGAVga输出中断键1个ENT控制LED由3个IO口控制DC电机由PWM控制闭环测速功能CAN BUS由 MCP2510和TJA1050构成Double DA MAX504一个10位DAC端口调试接口板载JTAG,直接支持下载与仿真25针2.1.2开发平台软件资料l linux操作系统启动的bootloader- Vivil linux操作系统内核- zImagel 根文件系统-root.cramfsl 应用程序压缩包-yaffs.tar.bz2l 开发工具tftp、busybox、FlashFXPl 外围部件驱动LCD驱动、鼠标/键盘驱动等l 交叉编译工具arm-linux-gcc-3.4.1l QTqt-embedded-4.4.0/qt-x112.1.3网络播放器硬件架构本课题的硬件框架如图2-1-3所示。S3C2410核心板CPUSDRAMFLASH640*480 TFT 16bit LCD 液晶屏VGA/AV转换总线隔离、附属电路USB Device接口DM9000AE100M 网卡RS232串口0扬声器电源、复位逻辑图2-1-3硬件架构2.2网络播放器开发过程简介为了在嵌入式开发平台上实现网络播放器,首先需要在宿主机的linux系统下用QT完成播放器界面程序的编写以及Mplayer的安装,并且利用编写好的界面程序调用Mplayer实现视频及音频文件的本地播放以及在FTP协议下得网络播放。在确认应用程序能够正确运行后利用交叉编译工具链将应用程序交叉编译,这一部分分为用户界面程序的交叉编译以及Mplayer的交叉编译。交叉编译完成后利用NFS文件系统将编译好的应用程序及动态库挂载至开发板上,如此便可以利用linux系统下得mini和开发板通讯并运行挂载文件夹下的网络播放器,查看运行结果。Up-tech2410网卡串口USBNFS核心CPU2.2.1搭建宿主机开发环境这一部分包括linux系统的安装、交叉编译器安装、mini的配置、NFS网络文件系统的配置。1. linux系统的安装:linux是采用GPL协议的GNU系统,它的源代码是公开的。基于这一优点,众多公司或组织在linux内核源代码的基础上进行了一些必要的修改加工,然后再开发一些配套的软件,并把它整合成一个自己的发布版linux。除去非商业组织Debian开发的Diebian GNU/Linux外,美国的Red Hat公司发行了Red Hat linux,法国的Mandrake公司发行了Mandrake linux,德国的SUSE公司发行了SUSE linux,国内众多公司也发行了中文版得linux,如著名的红旗linux。Linux目前已经有超过250个发行版本。本课题采用的linux系统是Red Hat9.0,详细安装过程参见 /thread-2126226-1-1.html2. 交叉编译器安装:嵌入式软件开发所采用的编译为交叉编译。所谓交叉编译就是在一个平台上生成可以在另一个平台上执行的代码。编译的最主要工作就在将程序转化成运行该程序的CPU所能识别的机器代码,由于不同的体系结构有不同的指令系统。因此,不同的CPU需要有相应的编译器,而交叉编译就如同翻译一样,把相同的程序代码翻译成不同的CPU语言。Up-tech2410本课题采用的交叉编译器为arm-linux-gcc-3.4.1,将开发板配套光盘上的arm-linux-gcc-3.4.1.tar.bz2解压至根目录/opt文件夹下。解压完毕后修改/root/.bashrc文件。命令为#vi /root/.bashrc在文件最后加上 export PATH=$PATH:/opt/ arm-linux-gcc-3.4.1/bin修改完毕以后在终端输入命令# source /root/.bashrc 使修改生效3. mini配置:由于在嵌入式开发过程中需要将开发板上的信息显示给开发人员,所以要有一种能够显示开发板上信息的解决方法。最常用的就是通过串口线输出到宿主机的显示器上,这样,开发人员就可以看到系统的运行情况了。在windows和linux中都有不少串口通信软件,可以很方便地对串口进行配置,其中最主要的配置参数就是波特率、数据位、停止位、奇偶校验位和数据流控制位等,但是它们一定要根据实际情况进行相应配置。Mini是linux下串口通信的软件,它的使用完全依靠键盘的操作,具有高效与便利等优点。Mini详细配置参见 /zjucxm/archive/2010/08/25/5836871.aspxMini详细命令参见 /casularm/archive/2005/03/15/320220.aspx4. NFS网络文件系统配置:NFS为Network FileSystem的简称,最早是由Sun公司提出发展起来的,其目的就是让不同的机器、不同的操作系统之间可以彼此共享文件。NFS可以让不同的主机通过网络将远端的NFS服务器共享出来的文件安装到自己达到系统中,从客户端看来,使用NFS的远端文件就像是使用本地文件一样。在嵌入式中使用NFS会使应用程序的开发变得十分方便,并且不用反复地进行烧写镜像文件。NFS的使用分为服务端和客户端,其中服务端是提供要共享的文件,而客户端则通过挂载“mount”这一动作来实现对共享文件的访问操作。NFS服务器端是通过读入它的配置文件“/etc/exports”来决定所共享的文件目录。在这个配置文件中,每一行都代表一项要共享的文件目录以及所指定的客户端对其操作权限。客户端可以根据相应的权限,对该目录下的所有目录文件进行访问。配置文件中每一行的格式如下:共享的目录 主机名称或IP 参数1,参数2,主机名称或IP是可供共享的客户端主机或IP,若对所有的IP都可以访问,则可用“*”表示。选项参数含义rw可读写的权限ro只读的权限no_root_squashNFS客户端分享目录使用者的权限,即如果客户端使用的是root用户,那么对于这个共享目录而言,该客户端就具有root权限sync资料同步写入到内存与硬盘当中async资料会先暂存于内存当中,而非直接写入硬盘例:/root/arm2410cl *(rw,no_root_squash)在设定完配置文件之后,需要启动nfs服务和portmap服务,这里的portmap服务时允许NFS客户端查看NFS服务在用的端口,在它被激活之后,就会出现一个端口为111的sum RPC(远端过程调用)的服务。这是NFS服务中必须实现的一项,因此,必须把它开启:命令为:#service portmap start启动nfs服务:#service nfs start详细内容参见 /doc/zh_CN/books/handbook/network-nfs.html2.2.2 建立引导加载程序(BootLoader)简单地说,Bootloader就是在操作系统内核运行之前运行的一段程序,它类似于PC机中的BIOS程序。通过这段程序,可以完成硬件设备的初始化,并建立内存空间的映射图的功能,从而将系统的软硬件环境带到一个合适的状态,为最终调用系统内核做好准备。一般用户可以从网络上下载一些公开源代码的Bootloader程序,如U-Boot、BLOB、VIVI、LILO、ARM-Boot、RedBoot等,然后根据自己的芯片进行移植修改。本课题采用的bootloader是博创公司提供的VIVI,因为引导程序是应该最先被烧写到开发板上的程序,所以需要特殊的烧写工具,本课题的烧写工具由博创科技公司提供,烧写方法参见 博创科技光盘资料-2410经典 Linux 系统烧写。成功烧写bootloader后可利用VIVI进行内核、根文件系统以及应用程序的烧写。2.2.3 内核编译与移植一个完整的嵌入式操作系统必须要有与硬件匹配的内核,一般的做法是下载别人已经一直好的linux操作系统。下载后根据自己的系统要求进行裁减、配置,再添加自己的特定硬件的驱动程序进行调试修改,最终得到一个适合于自己平台的内核,将其进行交叉编译,就可以得到符合要求的内核映像文件,最后将其下载到flash存储器芯片的相应分区中运行。本课题由于未采用新的硬件电路,所以不需要重新编译linux内核,可以直接使用博创公司提供编译好的内核,详细的内核编译方法亦可参考博创平台配套资料。2.2.4 建立根文件系统Linux的一个最重要特点就是它支持许多不同的文件系统。这使Linux非常灵活,能够与许多其他的操作系统共存。 Linux支持的常见的文件系统有:JFS、 ReiserFS、 ext、 ext2、ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。除了内核外,要使嵌入式系统正常运行还需要建立根文件系统。在嵌入式系统中,有一个非常重要的创建根文件系统的工具BusyBox,它能产生一个最基本的根文件系统。有了这个最基本得根文件系统,再根据自己的需要添加其他文件,即可构成一个完整的根文件系统。根文件系统在嵌入式系统中一般设为只读,需要使用mkcramfs、genromfs等工具产生烧写映像文件,并将其烧写到FLASH芯片的相应分区中运行。本课题使用的文件系统为cramfs。在嵌入式的环境之下,内存和外存资源都需要节约使用。如果使用RAMDISK方式来使用文件系统,那么在系统运行之后,首先要把外存(Flash)上的映像文件解压缩到内存中,构造起RAMDISK环境,才可以开始运行程序。但是它也有很致命的弱点。在正常情况下,同样的代码不仅在外存中占据了空间(以压缩后的形式存在),而且还在内存中占用了更大的空间(以解压缩之后的形式存在),这违背了嵌入式环境下尽量节省资源的要求。使用cramfs就是一种解决这个问题的方式。cramfs是一个压缩式的文件系统,它并不需要一次性地将文件系统中的所有内容都解压缩到内存之中,而只是在系统需要访问某个位置的数据的时侯,马上计算出该数据在cramfs中的位置,将其实时地解压缩到内存之中,然后通过对内存的访问来获取文件系统中需要读取的数据。cramfs中的解压缩以及解压缩之后的内存中数据存放位置都是由cramfs文件系统本身进行维护的,用户并不需要了解具体的实现过程,因此这种方式增强了透明度,对开发人员来说,既方便,又节省了存储空间。由于本课题使用NFS文件系统将应用程序挂载至开发板上运行,所以不需要重新建立根文件系统,只需烧写博创公司提供的根文件系统即可。详细建立根文件系统过程亦可参考博创公司提供的配套资料博创科技光盘资料-S2410经典实验指导书。第三章 网络协议及Mplayer3.1 文件传送协议FTPFTP 是File Transfer Protocol(文件传输协议)的简称,它是目前应用最广泛的协议之一,用于设备间的文件传送。众所周知,Internet是一个非常复杂的计算机环境,有PC,有工作站,有MAC,有大型机,而且在庞大的计算机网络中连接互联网的各计算机终端上安装着不同的计算机系统。为了解决不同机器与操作系统中的文件传输问题,必须要有一个统一的协议,FTP(文件传输协议)由此应运而生。由于FTP协议是工作在TCP/IP协议体系结构上的应用层协议,所以有必要对TCP/IP协议进行简要介绍。3.2 TCP/IP体系结构TCP/IP体系模型是计算机网络的事实标准。通过它可以实现各种异构网络或异种机之间的互联通信。图3-2-1为TCP/IP网络体系结构示意图,该体系结构有四层。其应用层程序可直接运行于传输层之上,传输层提供两种基本类型的服务:传输控制协议(Transfer Control Protocol, TCP),为字节流提供面向连接的可靠传输;用户数据包协议(User Datagram Protocol, UDP),为各个消息提供尽力而为的无连接传输。应用层传输层互联网层网络接口层图3-2-11. 网络接口层网络接口层是TCP/IP的最底层,该层得协议提供了一种数据传送的方法,是将数据分帧来传送,因此必须知道低层网络的细节,以便准确地格式化传送的数据,该层执行的功能还包括将IP地址映射为网络使用的物理地址。2. 互联网层(IP)互联网层的主要功能是负责将数据报送到目的主机,包括:l 处理来自传输层的分组发送请求,将分组装入IP数据报,选择路径,然后将数据报发送到相应数据线上。l 处理接收的数据报,检查目的地址若需要转发,则选择发送路径转发,若目的地址为本节点地址,则除去报头,将分组交送传输层处理。l 处理互联网路径、流控与拥塞问题。3. 传输层传输层主要功能是负责应用程序之间的端-端通信。该层中的两个最主要协议是TCP协议和UDP协议。TCP协议是一种可靠的面向连接的协议,它允许将一台主机的字节流无差错地传送到目的主机。TCP同时要完成流量控制功能,协调收发双方的发送与接收速度,达到正确传输目的。UDP协议提供的无连接报文传送没有差错恢复或流量控制机制,分组传输顺序检查与排序由应用层实现。UDP一般用于要求速度快但不一定要求可靠的传输场合。 QT信号与槽机制3.2.3 Qmake3.2.4 QT的事件处理3.3 MP3播放器设计与实现3.3.1 MP3 播放器模块化设计思想3.3.2“播放”按键功能的设计与实现3.3.3 “停止”和“暂停”按键功能的设计与实现键功能是杀死madplay运行进程(system(killall -9 madplay));而暂停功能是使用system()使madplay进程暂时停止(system(killall -STOP madplay &)),在下次暂停按键被激活时,再次让madplay继续运行(system(killall -CONT madplay &))。3.3.4“添加”按键功能的设计与实现要实现添加功能,肯定需要让用户自己去选择需要打开的文件,同时,本系统是个MP3播放器,如果所有文件都可以看到的话就会影响查找自己真正所需要文件的时间,那样我们就要需要有一个过滤的动作,把我们无法打开的或自己不需要的文件都屏蔽掉。更重要的是添加了什么文件必须要让用户自己知道,否则就不符合设计理念了。因此当添加按键激活时,我们就要使用方便的QFileDialog :getOpenFileNames()静态函数从用户那里获得一个新的文件名。这个函数会弹出一个文件对话框,让用户选择一个文件,并且返回这个文件名或者,如果用户单击了Cancel按钮,则返回一个空字符串。QFileDialog:getOpenFileName()的第一个参数是它的父控件。第二个参数是对话框使用的标题。第三个参数是显示的初始目录,“.”表示的是程序的当前目录。第四个参数用来说明文件过滤器,即确定文件类型。文件过滤器由一个描述性的文本和通配符格式组成。如果我们只需要MP3、WAV两种格式的话就可以如此书写:files = QFileDialog:getOpenFileName(this,trUtf8(“添加歌曲”),”,”, trUtf8(“添加文件(*.mp3 *.wav)”)添加的文件必须要用户能够看到,因此我们需要将返回的文件名保存下来,让用户看到。因此我们可以用foreach()将添加进来的文件的文件名保存到QListWidget让用户可见。具体用法:foreach(file,files)this-QListWidget-addItem(file);播放文件的时候我们必须要有有效地址,否则我们是无法播放文件的,因此播放文件地址至关重要,所以我们建立了一个虚拟列表来保存我们添加文件的文件名,这也方便我们进行曲目的选择,实现的方法在以上程序中添加一句foreach(file,files)this-listWidget-addItem(file); sourceList.append(file);3.3.5“上一曲”“下一曲”按键功能设计与实现当虚拟播放列表QList类的sourceList构建好后,实现上下曲按键功能就轻而易举。将当前正在播放的文件与播放列表里的文件做一一对应,找到其第一个与之对应的,将其所在位置对应的编号+1,将这编号里面的内容写入播放文件中,就可以实现下一曲,上一曲的原理一样,只是编号-1;具体实现方法: int index = sourceList.indexOf(music) + 1; if (sourceList.size() index) MainWindow:on_stop_clicked(); play-setEnabled(false); stop-setEnabled(true); MainWindow:sourceChanged(sourceList.at(index); MainWindow:playmic(music); int index = sourceList.indexOf(music) - 1; if (sourceList.size() index & index = 0) MainWindow:on_stop_clicked(); play-setEnabled(false); stop-setEnabled(true); MainWindow:sourceChanged(sourceList.at(index); MainWindow:playmic(music); 3.3.6 “滚动字幕”设计与实现滚动字幕并非Qt设计师的窗口部件,因此我们必须要自定义一个窗口部件,要完成这个任务有两种可行方法:改进法和插件法。改进法是最为快捷和简单的方法:选择一个内置Qt窗口部件,但该窗口部件要和我们自定义的窗口部件具有相类似的应用程序编程接口,并在Qt设计师的自定义窗口部件对话框中填写一些与这窗口相关的信息。然后,这个自定义窗口部件就可用于由Qt设计师开发的窗体中,尽管在编辑或者预览该窗体时它有可能仍旧显示为与之相关的内置Qt窗口部件形式。改进法的缺点是:在Qt设计师中,无法对自定义窗口部件中的那些特定属性进行访问,并无法对这窗口部件进行绘制。所有这两个问题都可以通过使用插件法得到解决。插件法需要创建一个插件库,Qt设计师可以在运行时加载这个库,并且利用该库创建窗口部件的实例。在对窗体进行编辑或者用于窗体预览时,Qt设计师就会用到这个真正的窗口部件,这要归功于Qt的元对象系统,Qt设计师可以动态获取它的这些属性列表。本设计的“滚动字幕”使用的就是改进法。要实现“滚动字幕”的功能,就必须实现四个时间处理器。分别是: void paintEvent(QPaintEvent *event);void timerEvent(QTimerEvent *event);void showEvent(QShowEvent *event);void hideEvent(QHideEvent *event);先进行初始化,offset=0;myTimerId=0;offset为用来绘制文本的x坐标值,myTimerId=0表示定时器没有启动。showEvent()用来启动一个定时器timerEvent()系统每隔一定时间都会调用它,它通过offset+1来模拟移动,从而形成文本宽度的连续滚动。如果定时器时间并非我们关注的定时器,我们就可以用hideEvent()调用QObject:killTimer()来停止定时器。函数paintEvent()使用QPainter:drawText()绘制文本。调用fontMetrics()得到文本所需要的水平空间,然后多次绘制文本,直至填满整个控件。 Gasmin Blanchette Mark Summerfield 著,齐亮 译,C+ GUI Programming with QT3M,北京航天航空大学出版社3.3.7 MP3播放器运行效果第四章 开发环境配置目前在嵌入式开发中,常用的开发模式为,宿主机和目标板联合开发。即首先在宿主机(装有Linux系统的PC机)上进行应用程序的开发、调试,通过后再进行交叉编译,把可执行文件和所需的库文件下载到目标板上运行。这种开发模式的优点是,在开发的前期,可以脱离硬件方面的限制,只需一台PC机便可以进行开发。在本系统开发的过程中,除了搭建PC上的开发环境、交叉编译环境外,还搭建了仿真环境。仿真环境的搭建,是为了减少在目标板上进行调试的次数,以达到资源利用的最大化。4.1 开发环境的搭建与使用 QT版本:Qt 4.5.3操作系统:Fedora 10.0驱动程序:触摸屏;Madplay硬件平台:UP-TECH 2410嵌入式的开发过程中,可以先在PC环境上进行脱离嵌入式平台的开发,故在搭建开发环境时,同时安装了Qt的三个版本,Qt for PC(PC环境下应用)、Qt for X86(仿真环境下应用)和Qt for arm(嵌入式平台下应用),对于前两个版本,在安装时要注意的一点是路径的指定,路径的指定可以在相应的config.sh文件里找到prefix一项,这便是安装时的路径。对于for arm版本,除了要注意路径外,还必需使它支持tslib触摸屏校正功能,这样才能接受触摸屏的输入操作。搭建好开发环境后,便可以进行项目的开发了。在使用的过程中,先要利用qmake工具,通过qmake project建立一个工程文件,这个命令会把所在文件夹里的所有源代码文件包含进行,如果文件夹里有一些不相关的源代码文件,要注册把它们从文件夹移除,以避免造成不必要的编译。在建立好工程后,再通过qmake命令,生成Makefile文件,以便供make命令使用。三个版本Qt的使用,都遵循上面这样的一个流程,在使用过程中注意使用到相应版本的qmake命令(相应的安装目录下的bin目录里面的qmake)即可。4.2 系统运行环境分析当一个应用程序在PC上通过了交叉编译后,就可以下载到嵌入式平台上运行了。由于Qt在编译时采用的是动态编译,动态编译虽然可以减小可执行程序的大小,但它的运行就必需要得到相关的库文件的支持。我们可以使用arm-linux-readdelf -d命令来查看可执行文件需要使用的动态库文件,然后将这些库文件下载到嵌入式平台的文件系统后,再经过设置环境变量,可执行文件才能顺利执行。具体的操作如下:在工程目录下,使用命令arm-linux-readelf -d madplay1,这里,madplay1为交叉编译后生成的可执行文件,查看程序运行时需要用到哪些动态库,结果如图4-1所示:图4-1 程序运行需要的动态库建立Qtlib目录,将所需的动态库文件全部复制到此目录中。由图4-1可知,程序在运行时需要11个动态库文件支持,在此对它们进行简单的分类,如下: 1)Qt/E动态库文件:libQtGui.so.4, libQtNetwork.so.4, libQtCore.so.42)tslib动态库:libts-0.0.so.03)C/C+动态库文件:librt.so.1, libdl.so.2, libpthread.so.0, libstdc+.so.6, libm.so.6, libgcc_s.so.1, libc.so.6字体库Qt在运行中,同样需要字体的支持。为了方便管理,把字体库也放在Qtlib目录下,并新建fonts子目录,将所需的字体文件simkai复制到fonts目录中。整理好所需支持文件后,便可以把它们下载到开发板上了。鉴于博创UP-TECH2410开发板的特性,我们把Qtlib,sound(madplay),touchscreen(s3c2410_ts.ko,触摸屏驱动程序)下载到/mnt/yaffs/Qtopia/目录下。做完这些准备工作后,系统还是不能运行起来的,还必需对运行时的环境变量进行设置,以使系统运行时能寻找到动态库文件的存放路径。在进行设置前,我们必须了解系统在运行时需要设置哪些环境变量。通过查看tslib和Qt手册,可以知道具体需要设置的环境变量及各个环境变量的意义。(1) tslib的环境变量说明:TSLIB_TSDEVICE :触摸屏设备文件名。TSLIB_CALIBFILE :校准的数据文件,由ts_calibrate校准程序生成。TSLIB_CONFFILE :配置文件名。TSLIB_PLUGINDIR :插件目录TSLIB_CONSOLEDEVICE :控制台设备文件名TSLIB_FBDEVICE :设备名(2) Qt的环境变量说明:POINTERCAL_FILE:指定文件包含的数据,用来校准触摸笔设备。 QWS_SW_CURSOR:如果定义了的话,软件鼠标的光标将一直是可用的。QWS_DISPLAY:指定显示形式和framebuffer。QWS_SIZE:指定嵌入式linux qt窗口在屏幕上的大小。QWS_MOUSE_PROTO:指定触摸设备。 QWS_KEYBOARD为输入设备指定输入设备和驱动。了解这些内容后,便可以进行环境变量的设置了,由于这是可执行程序运行时所需的环境变量,所以必需在设置环境变量后马上运行可执行程序,故使用了脚本的方式,具体步骤如下:(1) 新建madplay.sh脚本程序#vim madplay.sh#!/bin/shexport TSLIB_CONSOLEDEVICE=none/tslib运行需要的控制台,默认为/dev/tty,设为none则为LCD;export TSLIB_FBDEVICE=/dev/fb0/指定帧缓冲设备(在开发板的/dev/目录下查看,若没有fb0,则需要在/dev目录下建立链接ln s fb/0 fb0)export TSLIB_TSDEVICE=/dev/input/event0/指定触摸屏设备节点(在开发板的/dev/目录下查看,若在input下没有event0设备,则需要使用insmod命令加载触摸屏驱动。触摸屏驱动位置:/mnt/yaffs/touchscreen/ts-uptech.o)export TSLIB_PLUGINDIR=/usr/qpe/Qtlib/ts/lib/ts/指定触摸屏插件位置export TSLIB_CALIBFILE=/usr/qpe/pointercal/指定触摸屏校正数据存放路径(此路径需可写);export TSLIB_CONFFILE=/usr/qpe/Qtlib/ts/etc/ts.co
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 样品定制加工合同范本
- 自助餐券销售合同范本
- 饭店出兑合同协议模板
- 酒吧宿舍入住合同范本
- 瓷砖店员工合同协议书
- 门面租赁安全合同范本
- 酒店抵押贷款合同范本
- 全面预算考试题及答案
- 青岛成考试题及答案
- 汽车材料考试题及答案
- 养老院护理九防内容课件
- 人教版三年级数学上册教学计划(及进度表)
- 不要慌太阳下山有月光二部合唱线谱
- 光伏维护合同范本
- 房产查封申请书
- 2024年新疆伊犁州直检察机关招聘聘用制书记员笔试真题
- 《掌骨骨折诊治》课件
- 北师大版六年级数学上册课件 圆周率的历史
- 竣工结算审计服务投标方案(2024修订版)(技术方案)
- 2024秋新苏教版生物7年级上册课件 1.2.1 细胞的分裂和分化(第1课时)(教学课件)
- 桩基检测施工方案
评论
0/150
提交评论