掌上电脑系统开发_第1页
掌上电脑系统开发_第2页
掌上电脑系统开发_第3页
掌上电脑系统开发_第4页
掌上电脑系统开发_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEii掌上电脑系统开发【摘要】随着科技的发展和人们的需要,越来越多的消费类电子产品已经走进了移动时代,在嵌入式产品中掌上电脑的灵活便携性在业内脱颖而出,掌上电脑英文全名为PersonalDigitalAssistant,简称PDA。PDA可分为工业级和消费品PDA。工业级的主要有RFID读写器、条形码、POS机等;消费品PDA比较多如平板电脑、智能手机、游戏机等。此次开发的为消费品PDA,其功能主要定位在移动办公、学习、娱乐等。掌上电脑采用的是ARM-V4版的ARM9S3C2440开发板为开发平台,此为比较安全可靠而稳定的开发环境。掌上电脑系统包含的主要结构:底层的Uboot、内核、文件系统。文件系统为应用层,已经是上层应用,可扩展性强,所以主要实现的具体功能在文件系统上的应用程序这一部分。【关键词】掌上电脑;PDA;ARM9;移动办公;内核引导;文件系统; PAGEi目录TOC\o"1-3"\h\u1前言 01.1设计背景 01.2系统组成 11.3系统软件设计结构概述 32掌上电脑系统硬件介绍 32.1mini2440开发板 32.2LCD显示屏 43掌上电脑系统平台搭建 53.1U-Boot移植 53.1.1BootLoader介绍 53.1.2BootLoader设计目的 53.1.3BootLoader操作模式 53.1.4BootLoader选型 53.1.5U-boot启动流程 63.1.6U-boot移植过程 63.2内核移植 73.2.1内核介绍 73.2.2内核的任务 73.2.3内核启动过程 73.2.4内核文件目录 73.2.6内核裁剪移植过程 83.3文件系统制作 93.3.1文件系统介绍 93.3.2构建根文件系统 93.3.3BusyBox介绍与应用 93.3.4文件系统制作过程 94掌上电脑应用软件系统 104.1系统功能 104.2基本设计框架和处理流程图 114.3多媒体模块 114.3.1音频播放器 114.3.2图片浏览器 124.4系统模块 134.4.1桌面壁纸设置 134.4.2系统时间设置 134.4.2日历 144.5工具箱模块 144.5.1秒表 144.5.2闹钟 154.5.3画图 164.5.4计算器 164.5.6文本编辑器 174.6游戏模块 175结束语 186致谢 197参考文档 20PAGE20 PAGE01前言1.1设计背景现今IT技术迅猛发展,在嵌入式CPU中,8位和32位的微处理器在业内担任主力。在这数字化时代中8位处理器与32位处理器的性能在不断拓展,成本不断下降,但这同时还存在一个问题,8位处理器在很多环境下无法适应高数量的处理,所以32位的处理器自然就担当起了中高端产品的重任。32位的RISC处理器已经成为高中端嵌入产品的首选CPU,其主要原因还是归于客户的需求,如今客户所提的各类问题都需要处理大量的数据,这时只能提升CPU处理速度与多任务的能力来满足客户的种种要求。从另一个方面看,像数码相机、手机、PDA、智能游戏机等移动掌上设备,还有像视频监控系统、路由器、DTU等通信产品的推出,而且物物间还存在着大量数据流量的通信,这必然使系统更替上嵌入式操作系统来方便管理数据。还另一些如家电音箱、电视机、汽车音响、电玩等进行了数字化要求,它们的性能都超出了8位微处理器能提供的性能,进而也选择了32位的处理器。一个完整的嵌入式系统包含嵌入式处理器、处理器外围硬件、嵌入式操作系统、以及系统上的应用软件。所以一个完整的嵌入式系统是集软件、硬件于一体的微型计算机系统,但他不是PC计算机,只是一个只完成PC计算机一个功能模块的电子产品。现今我们的嵌入式产品大都把功能软件系统集成于硬件系统中。目前嵌入式产品的开发特性有,以PC计算机为开发环境,也以计算机的模型原理为框架,硬件可裁判,软件特定。产品面向用户、面向应用、完成特定功能、可靠、体积小、功耗低等特点。所以说嵌入式产品是与各行业相结合的产物[1]。由于嵌入式环境的需要,有一部分的嵌入式操作系统具有一定的实时功能。但对于在交通运输、工业控制等特殊领域中的嵌入式操作系统,便要求硬实时功能,这原因是在这些领域中对实时的要求高,硬件实时性好。而在我们日常的生活的中应用如掌上计算机、手机、电玩等所用的嵌入式操作系统,也具有语音与图像处理软实时功能。要如此成熟的嵌入式开发环境下,掌上电脑的实现已经不现是实验室的作品了。掌上电脑以嵌入式微处理器为核心、软硬件可裁判,来满足用户的需求的一种便携式设备[2]。为此掌上电脑也可认为是便携式的笔记本电脑。但因为硬件与处理器的性能上无法与PC机相比,所以很大一部功能受限。虽然无法与计算机一起完成各样的强大功能,但是其便携性、价格低廉以及特殊功能成为了其存在的意义。在市面上已经有很多成形的掌上电脑,但这些成形的掌上电脑的功能比较全,使得价格也昴贵了许多。其中至少有50%的功能是很少被用用户用到,这些功能是被浪费了。而本次设计,主要是围绕这一观点来设计。设计中主要是显示屏与音频两个模块的实现,而其它拓展部分可根据功能的需要可进行定制二次开发,因为硬件接口已经存在,所以二次开发会很方面。接下来主要介绍下本次设计中的功能。1.掌上电脑的功能掌上电脑所实现的主要的功能有:(1)在操作系统上完成个人信息管理,如记事本、备忘录等、计算器;(2)日常应用,如闹钟、日历等;(3)娱乐,如游戏、音频播放;2.掌上电脑组成

下面是掌上电脑的组成的特点:系统分层上看,掌上电脑具体可分为三大部分:(1)BootLoaderBootLoader这对于经常使用计算机的用户来说是个很熟悉的东西了。没错BootLoader是系统加电后运行的第一段代码,在我们PC机中引导程序是由BIOS与硬盘中的OS一起组成的。而在我们嵌入式系统中通常没有像PC机那样的BIOS固件程序,因此BootLoader完成系统的加载与启动任务[3]。(2)内核内核指的是一个提供硬件抽象、对硬件安全访问、设备驱动的安装的程序。(3)文件系统文件系统是操作系统用于明确管理磁盘或分区上的文件的方法和数据结构。而且我们通常把应用软件也写在文件系统里。1.2系统组成掌上电脑系统组成如图1.1所示: PAGE2图1.1掌上电脑系统组成此系统由四大部分组成:底层硬件部分包括有: CPU 主核弹部分,中央处理器FlashSDRAMSRAM 用于存储数据LCDtouchscreen 显示屏Watchdog 看门狗设备驱动部分包括有:LED 显示灯驱动KEY 按键驱动PWM 用于蜂鸣器的驱动SDRAM 内存模块驱动DMA 数据搬运驱动FLASH flash驱动UART 串口驱动LCD 显示屏驱动IIS 音频播放驱动OS部分这里移植的是linux操作系统内核为2.6.32版本Applaction部分包括有: Rootfs 文件系统 QTGui QT应用程序系统开发过程;一个嵌入式应用项目的开发过程是一个硬件和和软件设计的综合过程,是一个系统设计过程,此次掌上电脑设计主要是软件设计为主,所以硬件部分没有设计直接用友善之臂开发板mini2440,软件设计有以下步骤:Bootloader设计Linux内核的定制移植,驱动程序的开发文件系统制作、应用程序的设计系统调试,样机交付1.3系统软件设计结构概述硬件方面已经选用友善之臂公司提供的mini2440开发板,本系统从底层平台搭建开始,逐级向上的思想。系统分成两部分,第一部分系统平台搭建,其中包括Uboot移植、内核移植及rootfs制作,第二部分为应用软件系统,用QT实现各种应用程序功能。2掌上电脑系统硬件介绍 硬件分为两部分一块为mini2440开发板,另一块为sonyX35LCD屏,详细介绍如下2.1mini2440开发板Mini2440是目前国内性价比最高的一款开发板,它采用的samsungS3C2440处理器,CPU内核电源及复位芯片稳定,保证了系统运行稳定。其外围接口如图2.1图2.1mini2440开发板外围接口该板设有两种启动方式,NORflash与NANDflash启动,NORflash启动方式为开发时使用的,而NAND启动方式为产品形成时使用的启动方式。 其硬件构成及接口资源: CPU处理器ARM型号:SamsungS3C2440参数:主频400MHz,最高533MhzSDRAM内存板上64MSDRAM参数:32bit数据总线,时钟最高频率达100MHzFLASH存储板上256MNandFlash,2MNorFlash LCD显示屏接口 -集成4线电阻式触摸屏接口 -支持黑白色屏、4灰度级、16灰度级、256色屏、4096色屏STN液晶屏 接口资源 -1个100M以太网RJ-45接口(配DM9000网络芯片) -带3个串口,波特率可配达115200bps,且RS232电平转换电路 -1个USBHost接口-1个SD卡存储接口 -1个USBSlaveB型接口 -4个用户可用Led -6个用户可用按键 -1路立体声音频输出接口,2路麦克风接口 -1个2.0mm间距10针FTAG接口 -1个I2C总线AT24C08芯片 -电源接口(5V),带电源开关和指示灯 -1个PWM控制蜂鸣器 -1个I2C总线AT24C08芯片 -1个可调电阻,连接AD模数转换 -板载实时时钟电池 系统时钟源 -12M无源晶振2.2LCD显示屏 如图2.2所示为3.5寸LCD显示屏 图2.2X35LCD显示屏该显示屏为sony公司的X35屏,分辨率为240*320,带4线TFT电阻触摸屏。3掌上电脑系统平台搭建掌上电脑系统平台,相当PC机的运行应用程序的环境,也类似windows里的DOS。掌上电脑系统平台搭建有三个过程,第一步就是Uboot的移植,第二步,内核的移植,最后一步就是rootfs的制作[4]。如图3.1为固态存储设备的典型空间分配结构,其主要分配了三个过程的内存。图3.1固态存储设备的典型空间分配结构3.1U-Boot移植3.1.1BootLoader介绍 BootLoader这对于经常使用计算机的用户来说是个很熟悉的东西了。没错BootLoader是系统加电后运行的第一段代码,在我们PC机中引导程序是由BIOS与硬盘中的OS一起组成的。而在我们嵌入式系统中通常没有像PC机那样的BIOS固件程序,因此BootLoader完成系统的加载与启动任务。 用简单的话说就是,BootLoader就是在操作系统内核运行之前运行的一段程序。这段程序的运行,就是为了初始化硬件设备,并且把整个系统的软硬件带到合适的状态,为操作系统内核做准备。3.1.2BootLoader设计目的嵌入式操作系统的启动需要一定的条件,而这些条件都是BootLoader来完成的。所以说BootLoader充当的是引导的角色。3.1.3BootLoader操作模式现今大多数的BootLoader都会带有两种不同的操作模式,启动加载和下载模式,这两种操作模式对于我们开员来说是非常重要的。如果没有下载模式,我们的开发时间将会大打加长。但是从用户的角度来看这个问题的话,BootLoader将操作系统加载的方式启动的,而体会不到启动下载与加载模式的不同。加载启动,也有人叫“自主”模式,当用户开机后,BootLoader将从存储设备把操作系统通过加载方式,加载到RAM中运行,在这加载的整个过程中用户是不需要介入的。这种工作模式也是产品发布的时候用的工作模式。下载模式,这种模式被用在开发过程当中,当开发员给设备上电时BootLoader通过串口、网络或其它通讯方法从开发的PC机上下载文件到目标机的RAM中,然后再写入固态存储设备中。3.1.4BootLoader选型BootLoade包括U-BOOT、vivi、ppcboot、armboot、Redboot等,而我们此次设计选用的是U-BOOT,这是个通用的引导程序。U-Boot不仅仅支持嵌入式的引导,当前还有其它操作系统也支持,如netBSD,VxWorks,QNX,RTEMS,ARTOS,ARTOS,LynxOS等。U-Boot还能支持像MIPS、X86、ARM、NIOS、Xscale等诸多常用的处理器[4]。U-Boot源友在不断地更新,支持的开发板越来越多,其源码被反复应用、测试和维护,具有很好的稳定性;U-Boot较新的版本已经支持smdk2410开发板,所以其移植的工作量大大减少,可以缩短移植的周期,提高开发效率,降低开发的成本。3.1.5U-boot启动流程一般我们把bootloader分为阶段1和阶段2两大阶段。阶段1依赖于CPU体系结构的代码,它主要与CPU及存储设备进行密切的处理工作,对设备及存储器进行初始化工作,为了提高工作效率以及涉及到对协处理器的设置,所以阶段1的代码一搬都用汇编编写。其工作的主要流程:首先要先定义代码入口地址,然后设置中断异常的向量表,为中断异常提供跳转地址,设置完向量表后,再把CPU的工作模式设置为超级用户模式,接下来关闭看门狗,禁掉所有的中断。之后初始化设置CPU上工作频率;给内存区配置控制寄存器;完后把boot代码复制一份到RAM中;配置栈空间,为加载镜像2准备内存空间,最后跳转到镜像2的代码入口点,此入口一般情况为C代码的入口。阶段2因为这个阶段的代码比较通用,所以用C语言来写,主要实现一般的流程以及对板上一些外设驱动支持,而这部分的代码将会被复制到RAM中去执行。这样做的目的是为了方面程序的移植与阅读。在通常情况下,如果对于相同的CPU以及存储设备,若要添加外设支持时,其阶段1的代码可以保持不变,只要对阶段2中的代码时行一定的修改就行,同样,如果要支持不同的CPU,则只需修改阶段1的代码。 其工作的主要流程: 首先对本阶段要使用到的一些硬件设备的初始化,初始化完后对系统内存映射检测,将内核的和文件系统从flash中读出,写入RAM空间中。接下来给加上内核启动时需要用到的参数,最后调用内核,这样bootloader的生命周期就结束了,控制权已经移交了操作系统。3.1.6U-boot移植过程 移植工作主要是添加开发板硬件相关的文件、配置选项,然后编译生成文件烧写入板中。在植前,先下好u-boot包,再分析u-boot查找已支持开发板中是否有自己的板,如果没有,找一款硬件配置与自己开发板最接近的开发板的u-boot进行修改。 经过对U-Boot包的分析,同时用自己的板与其它进行比较找到了一款sbc2410x与mini2440最接近。所以选用sbc2410的配置为蓝本[5]。 移植过程:下载源码包在PC的linux开发环下建立root用户的工作目录/build_uboot把下载到的源码包解压到工作目录确定分区,这具区要看内核而定修改U-boot包的顶层Makefile,添加对mini2440的编译支持在/board的子目录中建立自己的开发板/board/mini2440目录,然后将sbc2410.c更名为mini2440.c且将

Makefile里面所有sbc改为mini修改/include/configs修改start.s,把里面所用关于sbc的宏改为mini/lib_arm/board.c中把关于SBC2410X_的宏都改为MINI2440_编译源代码,使用的4.3.2交叉编译工具烧写flash,编译生成的u-boot.bin文件通过串口工具下载到NANDFlash中。到这,整个U-Boot移植过程就结束了,我们移植U-Boot的最终的目的是让板子能启动内核,所以下一步就是移植内核了。3.2内核移植3.2.1内核介绍在如今所流行的操作系统中,Linux最大的特点就是遵循GPL自由软件基金会发行的用于计算机软件的许可证的操作系统,因此我们可以自己地使用并且修改和扩展它。就是因为这么一大特点,linux被越来越多的爱好者青睐。在这么一个开源的环境下,经常挨家探讨的问题就出现了,就是关于linux的系统移植中的核心部分,内核。在不同的操作系统上,像这样的移植是跨不同平台的、与其硬件是相关的,甚至连CPU都不相同。首先先介绍下内核,在Linux系统中实际上是由两个比较独立的部分组成的,即内核部分与文件系统部分。通常启动一个Linux系统是这样的,首先通过U-Boot的加载把控制权交到了内核的第一行代码,在这之后的过程中Linux要将自己的剩余部分全加都加载到内存,然后初始化所有的设备,在内存中建立好所需的数据结构。这一系列的执行流程就是内核启动时的工作,这个时候内核就已经掌控了所有的硬件设备了。如何操作这些设备,这些就是文件系统的事了,等文件系统有命令下达,内核就跟据命令进行操作并跟文件系统做交互。3.2.2内核的任务a.初始化和控制硬件设备,管理内存、管理进程、还有对设备的读写操作等做准备b.与文件系统进行交互,当文件系统下发命令时,内核将去执行命令,并且与文件系统进行交互。3.2.3内核启动过程在U-Boot无成对系统的引导并将Linux内核调入内存之后,周用函数bootLinux()将中转到Kernel的起始地址。如果内核包没有被压缩,那就可以直接启动了,如果内核包被进行压缩过的话,则要对其解压,在压缩过的内核包头部有一段解压缩的程序。解压后保存从Uboot中传进来的参数,执行一段与处理器存着的代码,接下来就会判断一下要不要将其重定位,如果不需要重定位的话直接对bss段进行清零,然后初始化页表1:1的映射,因为在打开cache之前,我们必需得先打开mmu,所以先对页表进行初始化,然后再依次打开mmu和cache。以上的的都准备完毕后,判断解压内核时会不会覆盖还没解压的内核映像。如果会的话,则要进行重定位调整,再解压内核;若是不会对其未解压的映像覆盖,则直接解压。最后就是刷新cache,关闭mmui和dcache,使其禁掉cache和tlb,最后跳转到内核入口点去执行与arm相关的内核代码[7]。3.2.4内核文件目录 Linux内核对很多平台都有很好的支持,其对外部接口都是统一的,并且与平台无关,当然内核里大多数代码都是与平台无关的,其主要体系的代码位于arch/architecture目录与include/asm-architectur目录里,与arm体系的平台相关的代码主要是在arch/arm与include/asm-arm目录里。 Linux内核源代码位于/usr/src/linux目录下/arch目录中包含了所有硬件结构特定的内核代码。而具体与CPU及其体系结构相关的代码以单独目录里,而相应的.h头文件内里存放在/include/asm目录。/drivers目录中是一些外围设备的代码,包括网卡驱动程序、底层SCSI驱动程序,及视频驱动程序等。/fs目录存放的是所有文件系统实现的代码。/include目录存放建立内核代码时所需的大部分包含文件。/init存放内核初始化代码。/ipc目录为进程间通信用的代码/kemel目录为高层系统调用代码/lib为库文件目录/mm目录里存放高层内核管理代码/net网络连接代码/sound声卡驱动代码和其它常用的设备驱动/usr构建包含root文件系统映像的归档文件以上是内核主要代码的存放目录,部分未列出。从目录结构上看内核中对每个模块都进行了分类,如图3.2是linux内核主要组成部分,主要由虚拟文件系统、内存管理、进程调度、进程间通信和网络接口等5个子系统组成。图3.2内核子系统组成图如图3.3为arch目录,从目录中可以看到第个体系结构都对应的子目录图3.3arch目录 如图3.4为arm目录,而在arm目录下也有很多的sub-arch子目录,不同的arm的CPU对应的目录也不同,所以各个类型都会有专门对应的目录。图3.4arm目录3.2.6内核裁剪移植过程内核移植前先找好参考板,而参考板的选择也是有一定的要求,处理器要相同或者类似,外围接口电路相同或类似基本的接口已经驱动了[6]。本设计中选用的内核版本为linux-2.6.32,可到内核官网下载地址如下:/pub/linux/kernel/v2.6/linux-.tar.gz源码拿到了就可以开始做裁剪与移植工作了,步骤如下:在顶层目录下复制config_mini2440_x35为.config在根目录下查看Makefile中编译器的前缀是否为arm-linux-查看机器码和UBoot中的代码是否一致Makemenuconfig进行内核配置系统筛选需要安装的与编译的文件与驱动。进入/arch/arm/boot目录,用mkimage工具为内核加上u-boot引导所需要的文件头最后把生成的uImage.img烧入flash 到这内核就移植完了,下步就是根文件系统的制作。3.3文件系统制作3.3.1文件系统介绍 所谓文件系统就是操作系统用于明确分区或磁盘上的文件的数据结构和方法,也就是在磁盘上组织起文件的方法。Linux文件系统是一个完整结构,文件系统将所有的文件组织到树形的目录结构中。 在Linux系统中遵循文件系统科学分类标准,就是一个定义了许多文件和目录的目录名和路径的标准。其主要的规则如下:/etc目录存放配置文件/dev目录存放设备文件/lib目录存放库文件/bin、/usr/bin、/usr/sbin目录存放的是系统编译完后的可执行文件3.3.2构建根文件系统 在linux系统中的根文件系统必需得包含能够让linux正常运行的基本内容,所以在制作跟文件系统时应包含以下这些内容: 基本的文件系统结构:etc,lib,proc,bin,dev,usr,tmp,sys一些基本程序运行时所需要的动态链接库文件基本的系统配置文件,如在init.d目录下的rcS文件一些必要的设备文件的支持。命令行的指令操作,如ls、rm、cp、vi、sh、cd等。3.3.3BusyBox介绍与应用 从英文名字上翻译为“繁忙的箱子”,在实际应用上,我们可以理解为linux系统里所有命令的集合,我们在操作linux系统的命令行时用到的所有指令都源于这个busybox。平时我们用的cp、ls、cd等命令都用到了glibc的调用,因此我们的使用的命令都静态地链接了这些调用,然而每个命令都是很大的,所以在每次的发行版本当中,都会使用动态链接的方法使用glibc,不过glibc本身就很大,在平常使用的PC机下还可以运行,但是在嵌入式系统中这就有点吃力了,并且在通常的嵌入式系统都不可能所有的库函数都会用上[9]。 解决这个命令使用的问题有两种办法,一种是对glibc进行适当地裁剪,而别一办法就是Busybox,就是把cp、cd等常用的命令程序的main函数名改下,全部都链接在一起,再把glibc静态链接,这种方法的好处就是只需要调用才会对其进行链接[10]。 Busybox的源码可以从官网下载,网址为/downloads/,这个源码为1.5.0版[11]。3.3.4文件系统制作过程 在制作文件系统过程中必需要注意目录的正确创建,还有一些重要的初始化文件与启动文件,具体步骤如下:建立开时用的工作目录建立文件系统的根目录,该目录为上文构建根文件系统中所分析的目录交叉编译busybox,解压开源码包,添加上交叉编译工具,然后对其进配置编译对文件系统进行编译安装复制交叉编译的链接库文件,其中包含动态库与静态库创建配置文件,在内核启动完时,先执行sbin/init程序,接下来执行/bin/sh,sh启动后就进行读取一些初始化配置文件。在/etc/profile文件里设置环境变量创建inittab文件,定义子进程,并写入启动命令等待文件被执行时启动创建rcS文件创建fstab文件构建/dev目录并加入创建必要的节点的命令用mkcramfs工具制作yaffs2映像文件,生成rootfs.yaffs2文件最后烧写rootfs.yaffs2到3分区启动开发板,这时一个操作系统就跑起来了,但在这个时候我们得在开发板上显示图像数据,tslib与QTE库的移植,在后面我们界面的显示与应层用的为QT应用程序的运行需要用到这两个,所以我们先得移植tslib与QTE库到板子上。最后移植完QTE库了,这就已经帮后面应用程序的执行提供了一个基本的运行环境[12]。运行QT的环境基本完成时,还有重要的一点,我们在后面的应用层有用到音频播放器,所以我们得再移植个Mplayer来给音频软件提供编解码功能。至此一个掌上电脑系统平台就基本搭建好了,在后面如果要拓展功能的话,只需进入系统平台安装驱动就行了。4掌上电脑应用软件系统 应用软件系统设计也叫UI的总体设计,我们的界面用的是QT库,QT用的是C++的基本语法,我们只需要熟悉C++语法就可以开发了,所以说QT是一门比较简单编程语言,严格来说QT应该只是C++的一个库。4.1应用软件系统流程图4.1系统功能 整个应用软件系统由多媒体、系统、工具、游戏四大模块组成。多媒体中包含播放器、图片浏览器功能;系统模块中包含桌面壁纸设置、系统时间设置、日历;工具箱中包含秒表、闹钟、画图、计算器、文本编辑;游戏里只放了一个俄罗斯方块。4.2基本设计框架和处理流程图 如图4.1为应用软件系统的流程图。 从图4.1中可以清楚看到我们的应用软件系统各个模块的子功能。从文件系统的初始化文件中加入./PDA运行应用软件系统程序,这样就运行起了一个进程[13]。各个了功能块,如多媒体为一个线程,系统为一个线程等,再下一级,音频播放器为多媒体线程创建出来的子线程,图片浏览器的线程也为多媒体线程的子线程,其它功能模块也如此。 如图4.2为代码工程图,按模块分成了4个文件夹。图4.2代码工程图4.3多媒体模块 多媒体模块下有两个应用功能,一个是音频播放器,另一个为图片浏览器。图4.3音频播放界面4.3.1音频播放器 音频播放器中可以播放音乐跟视频多部分格式都支持,如.mp3、.avi、.mp4、.rmvb等。在这这个播放器中,主要是以视频的播放为主,因为视频中已经包含了音乐播放了[14]。音频播放器的功能介绍打开音频播放界面,如图4.3,与普通的windows视频播放器类似,有快进、快退、上一个节目、一下个节目、全屏、暂停、停止、问音量调节等功能。音频播放器的实现音频播放器中主要用到Mplayer编解码器,我们主要对编解码器用slave命令对其控制就可以达到在界面控制音频的效果。图4.4音频控制流程 图4.4为音频控制流程,打开rb0、dsp、mixer设备节点,音频文件通过Mplaye编解码送到各设备中,其它中slave命令控制来控制一系列的操作,比如全屏、音量、播放、暂停等。实现的代码片段如图4.5,代码中为信息与槽的连接,也就是对各按键功能的连接实现。图4.5音频播放器代码片段4.3.2图片浏览器 图片浏览器实现比较简单,不需要像音频播放器那样借助编解码器实现,所以的功能函数已经在QTE库里已经存在,我们只需调用就行了,所以在实现功能时主要的还是按钮的UI设计。 图片浏览器的功能介绍进入图片浏览器,打开一张图片。如图4.6为图面浏览器的界面,在界面上可以看到上一张、下一张、放大、缩小、左翻转、右翻转等功能。图片浏览器的实现图片浏览器中的,所有功能需要的函数在QTE里已经可以直接调用,不得不说QT库功能还是挻全的,而且编写方便简单。所以我们的重点是在做UI设计,用PS做她各按钮的图标保存成PNG格式,然后我们在代码中为各功能图标写好位置后,直接用PNG图标盖上各功能按钮的形,这样更浏览器里的工具箱更加美观。图4.6图片浏览器界面4.4系统模块 系统模块中包含了桌面壁纸设置、系统时间设置还有日历。与上一模块一样,点击系统模块时,会进入各功能选择。4.4.1桌面壁纸设置 桌面壁纸设置比较简单,点击桌面壁纸设置时,跳转出选择图片的页面,这时只要选中一张图片就会覆盖现在桌面上的壁纸。所以其代码也会相对简单很多,只需封闭一个更新桌面页面的函数就可以实现壁纸设置的效果,代码如图4.7。图4.7壁纸设置代码片段4.4.2系统时间设置 图4.8为设置窗口,进入系统时钟设置窗口,这是一个简单的窗口布局,因为我们只需要设置时间,所以没做过多的UI设计。里面用上了三个QSpinBox来存放时、分、秒,两个QPushButton设置成确认设置跟取消设置功能按钮[15]。所以只需封装两个方法okclicked()与settime(),再关联上信号跟槽,系统时间设置的功能就可以实现了。图4.8时间设置窗口4.4.2日历日历页面比起上面两个页面来说更复杂一点,主要是表格的设置比较麻烦。实例一个QDate成员变量,用它来存放我们系统更新的时间,安装三个槽setFontSize()、setMonth()、setYear(),再将其连接到显示框里,面cursor表格里存放日期,跟据系统里的日期填入cursor表格里。从系统模块中点日历,将进显示这设置年月日,及日期表格。如图4.9为日历表格的代码片段。4.9日历表格代码片段4.5工具箱模块 工具箱模块中内容比较多,其各应用程序功能有秒表、闹钟、画图、计算器还有个文本编辑。在这个模块里像计算最为复杂,因为里面要用到一些转换的算法跟公式,还有界面较多按钮,设计比较麻烦。具体实现看下面详细解析。4.5.1秒表 秒表的设计与上面的视频播放的结构有点类似,主要是上面为操作按钮,下面为显示时间框。 秒表功能介绍在工具箱中点击秒表进入秒表页面,如图4.10,在页面的最顶上一栏为时间,下来一栏为中有start按钮,开始秒的计时,clear为清空记录,在点下start按钮时,该工具栏会中会出现registe按钮,此按钮来用记录当前定时时间,点击一次记录一条时间。秒表的实现从秒的界面开始,QString一个字符串来存放背景图片;实例一个QTIME用于定时;主显示界面为QLabel;再定义三个PushButton,用于操作定时器。只要设置三个EVENT就可以完成我们的定时器了。timerEvent()更新时间,paintevent()画背景,showEvent()刷新页面。图4.10秒表界面 4.5.2闹钟 在工具箱里,秒表与闹钟的界面风格差不多,因为操作者较为简单所以,代码量都不会很大,主要都是布局上会多花些心思。 闹钟功能介绍在工具箱中点击闹钟进入闹钟页面,如图4.11,页面中间有三个可选的闹钟,如果要启用闹钟,只要在对应的闹钟后面选上就行。Alarm1为例,在时间框中填入闹钟时间,并选上启用,等到系统时间到达闹钟时间时音乐就会响起,如果要停止音乐,只需点StopAlarm音乐就会停止。图4.11闹钟页面闹钟功能实现闹钟的原理很简单,或者说跟本不算是原理,只是一个简单套路。用户设定好时间,并启用闹钟,当系统时间与闹钟所设的时间一致的话,就会解设定好的槽函数。所以只要在槽函数里写入播放的音乐就可行了。界面的代码就不分析了,都与上文中的秒表大同小异。4.5.3画图 这是一个窗口页面,大小可伸缩,画图的功能比较多,包括像画直线、圆、加粗等操作。 画图介绍该功能中,可操作的按钮比较多,菜单设置选项里有两栏File与Options。File里面有Open图片,Save图片,还有个退出。在Options菜单里面选项比较多,画笔颜色、刷子颜色、画笔大小、涂鸦、画直线、画矩形、画圆形、画椭圆、擦除、清屏。画图代码实现实现并不难,因为跟上边一样有QT库少了很多事,像画圆、矩形等功能在QT库都有对应类的方法,所以我们只需要写好每个选项对应需要的发槽就行,等待用按下选项发出号就会自动跳转到槽函数去执行。如图4.12为画图的代码片段,其中为保存图片、画笔颜色与笔刷槽函数的代码,从这足可见QT库的方便。图4.12画图代码片段4.5.4计算器 计算器在很多的手机与学习机都很常见,还有专门的计算器产品。这里也是跟手机里的计算器差不多,模拟计算器的一个软件。 功能介绍计算器的操作应该大家都比较熟悉,如图4.13backspace为单数字删除键,clearAll为清屏键,exit为退出计算器。中间为数字区0-9,数字区旁为运算符号键,运算符号键右边为常用的运算函数,如平方根、平方等。所以这是一个能够做一些简单运算用的计算器。 计算器的实现有了上面对QT编程思想的了解,现在对于计算器来说应该很容易了,其实大多的界面编程都是类似的,只要对各控制件类、按钮类熟悉了,一切都会变得简单很多。计算器的实现也一样,先做好每个按键的大小,再填入layout里面,接下来完成各按键的功能,最后关联按键的信号与槽函数。 槽函数中只是把获取到的数据进行运算处理,其它功能如删除、清空等操作的槽函数与运算处理的有所不同。图4.13计算器界面4.5.6文本编辑器 文本编辑器功能这个与上文中的画图工具有相通点,不过这个会较简单,因为不需要做画图里面各种画图形操作。 文本编辑菜单内容比较少,只有新建文件、打开文件、保存文件、退出电子书等简单选项。 实现功能的的代码里面只需要实现openFile()newFile()两个函数的功能就行,其它步骤与上文相似。4.6游戏模块 该模块中,工作量比较大,只做了一个游戏。不过这也是一款比较经典的游戏“俄罗斯方块”,这个游戏还是参考了网友提供的资料才完成,大部分编写的思想还源于网友热心帮忙。图4.14俄罗斯方块如图4.14为游戏的全景图,游戏中有下一个方块的提示、积分、销毁行数、方块下落速度,其它为其本操作按钮左、右、下、上、暂停、开始、退出,其中向上键为方块转向变换。通过定时刷新,让窗口中的方块动起来。 游戏实现与前面几个功能比起来复杂了很多,代码分了三个文件Tetrixpiece.cpp文件实现各种方块,Tetrixboard.cpp文件实现各动作操作与规则的实现,Tetrixwindow.cpp文件为主窗口的布局。Tetrixpiece.cpp文件:如图4.15中rotatedLeft()为实现翻转方块的代码,其对X、Y坐标进行对换以达到翻转效果。 Tetrixboard.cpp文件:文件中包含如start()、pause()、moveLeft()、pieceDropped()等对方块进行操作函数进行实现。图4.15Tetrixpiece代码片段Tetrixwindow.cpp文件:在此文件中对整个窗口、游戏按钮、分数记录、方块大小等把有控件进行布局。这个游戏做完后回头看,其它就不难,也就没那么神秘了。5结束语至此整个设计就已经到结尾了,其中还有不少的BUG还得继续修补,一个完整个的设计需要用户与时间来考验的,BUG的存在证明了设计的处于正常轨道当中。现在整个系统结构出来了,后面还有很多功能可以拓展,如SD卡的拓展、网络的连接、安装应用软件等等,这些都是后期可以再补充的内容。此次设计还是基于培训班课程的素材的基础上进行整合,并加强与完了整个系统。该设计的完成也证明了培训的效果更肯定了在大学里的学习。从刚开始什么是linux都不明白到现在成功的开发出了掌上电脑的系统,一路困难重重,掌上电脑的开发是我第一次对嵌入式产品有了启蒙性的了解,今后的路也许将就从此打开。6致谢 这次系统能够最终成功完成,应该说是对我大学学习专业知识的肯定,也是对培训效果的证明。当然这次成功完成系统的开发除了个人的努力外,是应该感谢一直帮助我的老师和同学们。首先感谢培训班的苏洪球工程师,在苏工的指导下,我从嵌入式知识就是从无到有的一个过程。苏工待人随和,只要我们有问题她都会耐心地一一详细解答。再来,感谢我们研究室的导师潘新民教授,在开发这系统前我大部分的硬件专业知识都是在研究室里潘教授给我的启蒙。同时,还得感谢身边一直支持我的同学和朋友,在此表示衷心感谢。7参考文档[1]潘新民,王燕芳.微型计算机控制技术实用教程.北京:电子工业出版社,2010.1-19.[2]张俊峰.基于ARM芯片的机车制动监测系统研究.学位论文.武汉:武汉理工大学,2004.8-9.[3]王潍.基于uClinux的温控系统的底层软件开发.学位论文.天津:天津大学,2005.13-13.[4]白伟平.基于ARM的嵌入式BootLoader浅析.期刊论文:微计算机信息,2006.6-9.[5]刘长伟.基于IntelPXA270的Bootloader的设计.会议论文:全国抗恶劣环境计算机第十七届学术年会,2007.13-15.[6]陈溯.基于ARM平台的数码相框软件开发

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论