基于嵌入式的TXT电子书阅读器的开发_第1页
基于嵌入式的TXT电子书阅读器的开发_第2页
基于嵌入式的TXT电子书阅读器的开发_第3页
基于嵌入式的TXT电子书阅读器的开发_第4页
基于嵌入式的TXT电子书阅读器的开发_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

JIU

毕业论

题目基于嵌入式的TXT电子书阅读器开发英文题目DevelopmentofTXTE-bookReaderBasedonEmbedded院系信息科学与技术学院专业计算机科学与技术姓名刘红刚年级A081143指导教师于林峰 二○一二年五月摘要系统设计了基于嵌入式系统的TXT电子书阅读器,在飞凌FS2410硬件平台下,可以实现基本的阅读,对TXT格式电子书实现上下行以及翻页查看。主要的技术难点:如何将文字显示出来,实现多语言的支持,实现上下一行的翻动和上下页的翻动显示以及放大缩放字体显示,改变字体颜色。首先对基于嵌入式系统的TXT电子书阅读器的开发环境搭建和硬件系统平台做了简要的概述,并在现有的硬件平台下,详细讲述了构建嵌入式ARM-Linux开发系统的过程,整个过程是基于开发电子书阅读器的内容来阐述的。主要内容包括,交叉编译环境的搭建,U-Boot的移植与烧入,嵌入式Linux内核的裁剪和移植,TFTP服务环境的搭建,NFS网络文件传输环境的搭建,根文件系统的制作,SDL功能开发的研究,接下来也就是TXT电子书编码的实现,经过多次的调试以及优化,最后要将应用程序移植到开发板上的实验过程。关键词:嵌入式,阅读器,翻页AbstractSystemdesignaTXTreaderbasedonembeddedsystem,itcanrealisebasicreadingonthehardwareplatformoffeilingFS2410,includingtheviewforthetxtformate-bookasthewayofupanddownandpagerotate.Themaintechnicdifficulties,thatishowtoshowthetxtonthescreenwithwhichmethod,howcanrealisemul-languagesupport,howcanrealisetheshowofthepre,thenextpageandthepreline,thenextlineoftxt,andchangethecoloroffont.ItmakesabriefoverviewofTXTreaderbasedontheembeddedsystemtomakethedevelopmentenvironmetandbuildthehardwareplatformonthefirst,thenitmakesadetailedintroductionoftheprocessofbuildingaembeddedARM-Linuxdevelopmentsystembasedonourexistinghardwareplatform,andtheallthedescriptionisbasedonthedevelopmentofe-book.Allthecontentsincluedbuildingenviormenofcross-compile,thetransplantionandburntofU-boot,cuttingandtransplantionofkernel,thestructuresofTFTPserviceenviorment,thebuildingsofNFSnetworkfiletransferenvironment,theproductionofrootfilesystem,theresearchofSDLdevelopmentfunctions,thenextprocessisrealizationofencodeofe-book,whichistestedandoptimizedconstantly,portingtheapplicationtotheboardfinally.Keywords:Embedded,ElectronicReader,Page摘要 IAbstract II1绪论1.1系统概述 (1)1.2研究的意义和目的 (1)1.3国内外发展现状 (1)1.4发展趋势 (2)1.5本章总结 (2)2系统需求分析2.1系统功能需求分析 (3)2.2系统硬件需求分析 (4)2.3系统软件需求分析 (4)2.4本章小结 (6)3嵌入式ARM-Linux环境建立3.1基于Arm-Linux系统的总体设计 (7)3.2Arm-Linux交叉编译工具链的建立 (8)3.3U-boot的移植并烧入和烧入 (8)3.4Linux内核的裁剪与移植 (10)3.5根文件系统的制作与移植 (12)3.6NFS网络文件系统的建立 (13)3.7TFTP服务的配置 (14)3.8本章小结 (15)4系统设计4.1系统概要设计 (16)4.2系统详细设计 (17)4.3软件运行环境 (224.4本章小结 (22)5系统实现5.1系统关键技术 (23)5.2编码实现 (25)5.3本章小结 (346程序移植与验证6.1移植需求 (35)6.2程序移植 (35)6.3程序验证 (36)6.4本章小结 (38致谢 (39参考文献 (401绪论1.1系统概述本系统是设计一个基于嵌入式TXT的电子书阅读器功能开发[1],实现在嵌入式系统上可以查看电子书的功能。硬件部分采用三星FS2410开发板[2],网线。系统软件部分包括系统初始化程序U-boot[3],Linux操作系统[4],根文件系统[5]和一些运行应用程序所需要的库。应用软件就是开发的TXT电子书阅读器程序。基于SDL开发库进行开发[6],首先将嵌入式Linux操作系统移植到基于ARM9核的FS2410的平台上。在嵌入式操作系统环境下,运行具有阅读TXT电子书功能的应用程序,实现对TXT电子书的基本阅读。1.2研究的意义和目的电子书阅读器将会带动阅读习惯、学习模式、内容创作及出版型态的改变,走向分众化、个人化、网络化及随身携带的行动智能信息发展,全方位的数字内容服务平台及商业模式也将应运而生,这些改变将带动许多新的服务产业,也会是未来其他新兴科技应用发展的典范。针对电子书阅读器的开发技术,不仅是限于各大公司之间的竞争,对个人也是挑战,本系统设计并实现了TXT电子书阅读器的功能,不仅要在嵌入式底层做好基础,而且还要在上层应用上开发阅读器。嵌入式系统可以有很灵活的特点,在本系统中只需要满足能让应用程序运行的要求,也可根据需求进行适当的改动。在上层应用开发上,电子书阅读器要能在嵌入式系统上实现上、下一行查看以及翻页查看功能以及放大缩小字体。1.3国内外发展现状随着数字阅读的方兴未艾,电子书市场风生水起,但国内外电子书发展市场,整体增势缓慢,电子书远没有达到普及的程度[7]。究其原因,不仅在电子书内容上没有达到服务用户的要求,而且在终端设施上也没有达到,另外,电子书在资源上混乱,没有形成一个完整的规划。然而面对电子书市场的巨大利润,国内外各大公司都在此方向寻生存机遇,在技术上,电子书阅读器并没有达到炉火纯青的地步,有很多的技术难题存在。1.4发展趋势尽管电子书现在已经到处可见,但是用户的需求是无止境的,伴随着硬件设施的不段改良,电子书会向着便捷,清爽,多元化,智能化的道路发展,打破传统纸质书的阅读习惯,有非纸质书不能比拟的优势。在未来的发展道路上,电子书很有可能会和移动3G相结合,达到书籍和网络的相结合,成为一项成熟的产业和技术,电子书普及到每个用户的手上。开发出高性能以及人性化的的阅读器,才能满足用户需求,达到用户所预期的效果。1.5本章总结2系统需求分析[8]2.1系统功能需求分析随着数字电子技术的日益发展,电子书市场也愈演愈烈,面对巨大市场利润,各大公司纷纷投向电子书市场,电子书的应用将会普遍在普通市民中。本系统是开发出具有TXT功能的电子书阅读器,该阅读器主要功能有上下行查看,翻页查看,放大查看以及尽可能完成具有书签的电子书阅读器,然后将该应用程序移植到开发板上,能进行相应的阅读功能,其功能流程如图1-1所示。等待命令等待命令有按键有按键 否 结束 是结束有效按键 有效按键 否 是左Ctrl右ctrl左Alt下键上键右键左Ctrl右ctrl左Alt下键上键右键左键颜色退出放大下页上页下行上行颜色退出放大下页上页下行上行 图1-1功能流程图2.2系统硬件需求分析嵌入式系统开发与硬件平台紧密相连,没有硬件支持的嵌入式平台是不完整的,良好的硬件平台也为嵌入式系统应用软件的开发提供了许多便利,选择合适的硬件平台是一项复杂的工作。2.3系统软件需求分析软件平台主要是BootLoader[10],嵌入式操作系统,嵌入式文件系统以及一些在本电子书应用程序运行所要的库。(1)BootLoader是在操作系统内核运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。结合系统的需求并综合比较了各种BootLoader的优缺点,本系统选择了U-boot作为本系统的BootLoader。U-Boot,全称UniversalBootLoader,是遵循GPL条款的开放源码项目。U-boot不仅仅支持嵌入式Linux系统的引导,它还支持NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS嵌入式操作系统。U-boot具有较高的可靠性和稳定性,高度灵活的功能设置。U-boot可以使用JTAG板直接烧写入NorFlash中使用,也可以直接烧写入NandFlash中运行。(2)嵌入式操作系统是嵌入式系统极为重要的组成部分。它提高了系统的可靠性、提高了开发效率,缩短了开发周期、充分发挥了32位CPU的多任务潜力。嵌入式操作系统的选择主要考虑其可移植性、可利用资源、系统定制能力和成本。综合对比了几种嵌入式操作系统,本系统选择了嵌入式Linux操作系统,它与其它嵌入式操作系统相比,Linux有以下特点:=1\*GB3①Linux系统是层次结构且内核完全开放。Linux是由很多体积小且性能高的微内核系统组成;=2\*GB3②强大的网络支持功能;=3\*GB3③Linux具备一整套工具链,容易自行建立嵌入式系统的开发环境和交叉运行环境,可以跨越嵌入式系统开发中仿真工具的障碍;=4\*GB3④Linux具有广泛的硬件支持特性。无论是RISC还是CISC、32位还是64位等各种处理器,Linux都能运行;=5\*GB3⑤Linux有装载和卸载程序的能力,所有应用程序以文件的形式被存放在闪存文件系统中并在必要的时候被装载到内存中,以节省RAM;=6\*GB3⑥Linux移植到新的微处理器体系非常快捷,一般是将其移植到一种新型的目标板,其中包含有独特的外设。(3)根据上面的分析本系统选择了Linux作为嵌入式操作系统,其支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等[11],为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS,为各类文件系统提供一个统一的操作界面和应用编程接口。不同的文件系统类型有不同的特点,因而根据存储设备的硬件特性、系统需求等有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为RAM和ROM,常用的基于存储设备的文件系统类型包括:jffs2,yaffs,cramfs,romfs,ramdisk,ramfs/tmpfs等。本系统采用了busybox来制作yaffs的文件系统作为本系统的文件系统,其主要有一下特点:=1\*GB3①YAFFS[12]文件系统类似于JFFS/JFFS2,是专门为NAND闪存设计的嵌入式文件系统,适用于大容量的存储设备。它是日志结构的文件系统,提供了损耗平衡和掉电保护,可以有效地避免意外掉电对文件系统一致性和完整性的影响。=2\*GB3②YAFFS文件系统是按层次结构设计的,分为文件系统管理层接口、YAFFS内部实现层和NAND接口层,这样就简化了其与系统的接口设计,可以方便地集成到系统中去。与JFFS相比,它减少了一些功能,因此速度更快,占用内存更少。=3\*GB3③YAFFS采用一种多策略混合的垃圾回收算法,结合了贪心策略的高效性和随机选择的平均性,达到了兼顾损耗平均和系统开销的目的。2.4本章小结在这一章,主要做的工作就是进行系统需求分析,这一章在整个系统开发上起到了至关重要的作用,可以说是一个关键环节,这一章的分析调查结果直接指导以后的系统开发的工作,也直接关系着整个系统完成后的功能情况。在进行系统需求时,查阅了大量关于硬件和嵌入式操作系统方面的知识,综合各方面的因素,最终确定了选用的硬件平台和嵌入式操作系统,综合比较了各个系统之间的优点和不足,最终确定了系统的功能。3嵌入式ARM-Linux环境建立绝大多数的软件开发都是本机开发、调试,本机运行的方式进行,但是这种方式不适合于嵌入式系统的软件开发,因为对于嵌入式系统的开发,它没有足够的资源在本机运行开发工具和调试工具。因此在宿主机上搭建一个好的开发环境是很关键的一步,它的成败直接影响下一步的进展。根据需求分析确定了系统的开发环境是嵌入式Linux操作系统。3.1基于Arm-Linux系统的总体设计根据需求分析和嵌入式系统结构,得出了系统所需的系统结构如图3-1所示。图3-1系统结构图论文设计的嵌入式TXT电子书阅读器系统主要分为四个层次:(1)基于S3C2410A处理器的硬件平台对SDL的研究和相关代码实现并移植到开发板上。3.2Arm-Linux交叉编译工具链的建立 与主流软件开发相同,嵌入式系统开发同样需要用到编译器、链接器、解释程序、集成开发环境以及诸如此类的开发工具。但是在嵌入式系统开发中,由于执行应用程序的平台(目标机)与创建应用程序的平台(宿主机)并不兼容,因此,需要交叉开发工具进行交叉编译。本文采用工具链Arm-none-linux-gnueabi-创建Arm-Linux交叉编译环境[13]。建立过程如下:(1)登录Linux操作系统,然后再/home/farsight目录下新建toolchain目录;(2)将工具链toolchains_for_s3c复制到以上toolchain目录下,并执行解压;(3)在宿主机中设置环境变量使得系统能自动调用已建立好的工具,具体的设置方法为:在根目录中打开/etc/profile文件添加交叉编译环境。具体设置方法为:vi/etc/profile,在文件的最后加上:exportPATH=$PATH:/home/farsight/toolchain/bin最后保存退出,在终端输入source/etc/profile即可生效,在终端输入arm-none按Tabs键即可提示得到该交叉编译工具的名称。3.3U-boot的移植并烧入和烧入针对FS2410开发板,对U-boot要进行一定的移植工作[14],主要改动的地方有:(1)添加平台信息smdk2410是s3c2410的标准版,在smdk2410平台的基础上可以实现FS2410的移植;=1\*GB3①进入U-boot所在目录下的board/samsung/,进行cpsmdk2410fs2410-a;=2\*GB3②进入fs2410目录,进行mvsmdk2410.cfs2410.c;=3\*GB3③在Makefile下修改,将COBJS:=smdk2410flash.o;=4\*GB3④修改为COBJS:=fs2410flash.o,进入U-boot目录下的include/configs目录,进行cpsmdk2410.hfs2410.h,返回到顶层目录下的Makefile添加fs2410的内容。在smdk2410_config:unconfig下面添加对fs2410相应的信息:fs2410_config:unconfig@$(MKCONFIG)$(@:_config=)armarm920tfs2410samsungs3c24x0接着修改编译器,在ifeq($(HOSTARCH,$(ARCH)))CROSS_COMPILE?= endif下面添加ifeq(arm,$(ARCH))CROSS_COMPILE=arm-none-linux-gnueabi-endif(2)针对fs2410平台要做出进一步的修改,主要做出的修改如下:修改start.S的中断屏蔽位,改为11个;修改配置文件include/configs/fs2410.h中的命令行提示符,网络配置参数,内核加载地址,Nand功能添加,环境变量的保存位置;在cpu/arm920t/start.S文件中对Nand启动进行修改,主要包括添加Nand启动标志位,添加BWSCON寄存器的定义,添加启动模式的判断;为nand启动做出支持;修改common/env_nand.c文件,添加norflash环境变量烧写功能。修改后,编译U-boot,进行如下操作:$:makefs2410_config$:make此时U-boot已经做编译好,在相应的U-boot目录下就可以看到u-boot.bin可执行文件,此可执行文件就可以实现烧录了。(3)利用H-jtag将u-boot烧写在fs2410开发板上的Nandflash上;(4)打开开发板,进入命令状态添加环境变量。$setenvethaddr08:00:3e:26:0a:43$setenvbootcmdtftp30800000uImage\;bootm$setenvbootargsconsole=ttySAC0,115200init=/linuxrcroot=/dev/nfsnfsroot=30:/opt/filesystemip=90:30:::farsight_30:eth0:off重启开发板,此时开发板就可以工作了。3.4Linux内核的裁剪与移植嵌入式系统的硬件资源毕竟有限,不能直接将Linux操作系统作为嵌入式硬件平台上的操作系统,需要针对具体的应用进行内核的配置和裁减,使整个系统能够存放到容量较小的Flash中。Linux的动态模块加载方式使Linux的裁剪极为方便,高度模块化使得添加和删减非常容易。结合该系统在开发中所需要的功能,Linux内核的裁剪与移植过程中涉及到的目录有:include/、arch/、drivers/、fs/,移植的过程为:(1)在/home/farsight目录,将Linux源代码解压至该目录下,本设计用到的内核为Linux-内核;(2)编译ARM-Linux内核,进入内核目录,在终端输入:makemenuconfig;然后对内核进行裁剪和配置:(1)选择<*>SystemType,选中该目录下的<*>ARMsystemtype模块,选中所用到的硬件平台信息,即SamsungS3C2410;(2)在以后的实验中需要用到网线,必须在内核中添加网卡的支持,在这一步中的操作如下。=1\*GB3①将cs8900.c和cs8900.h文件拷贝到linux-/drivers/net/arm目录下。=2\*GB3②修改Linux-/dirvers/net/arm/Kconfig文件,添加以下内容:ConfigS3C2410_CS8900 Tristate“CS8900support” DependsonNET_ETHERNET&&ARM&&ARCH_SMDK2410 help Supportforcs8900chipsetbaseEthernetcards,ifyouhaveanetworkcardofthis type=3\*GB3③修改driver/net/arm/Makefile文件,对网卡进行支持,添加配置内容为:obj-$(CONFIG_S3C2410_CS8900)+=cs8900.o=4\*GB3④添加地址映射定义,修改arch/arm/mach/s3c2410/include/mach/map.h文件,添加如下内容:#definepSMDK2410_ETH_IO __phys_to_pfn(0x19000000)#definevSMDK2410_ETH_IO 0xE0000000#defineSMDK2410_ETH_IRQ IRQ_EINT9=5\*GB3⑤添加平台信息,修改arch/arm/mach-s3c2410-smdk2410.c文件,添加对平台信息的支持,其内容为:{vSMDK2410_ETH_IO,pSMDK2410_ETH_IO,SZ_1M,MT_DEVICE}=6\*GB3⑥配置内核,支持cs8900网卡。(3)LCD驱动也是必不可少的,具体的操作步骤如下:=1\*GB3①在arch/arm/mach-s3c2410/mach-smdk2410.c中添加LCD参数设置,在本文件中的smdk2410_init函数中添加如下内容:S3c2410xx_fb_set_platdata(&s3c2410_fb_info)=2\*GB3②配置内核,添加对LCD的支持。$makemenuconfig DeviceDrivers> Graphicssupport> [*]Supportforframebufferdevices> [*]S3C2410LCDframebuffersupport(4)用makezImage指令编译生成内核镜像文件;(5)编译完毕后在arch/arm/boot目录下将会生成ARMLinux内核镜像文件zImage,这就是我们将要下载到目标系统的内核文件,将其拷贝到tftpboot目录下,执行的命令为:cparch/arm/boot/zImage/tftpboot3.5根文件系统的制作与移植(1)根文件系统介绍根文件系统不仅具有普通文件系统的存储数据文件的功能,它是内核启动时所mount的第一个文件系统,内核代码的映像文件保存在根文件系统中,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如rcS,inittab)和服务加载到内存中去运行。(2)根文件系统制作此处用到的根文件系统是busybox-.tar.gz,进行解压并进入该目录。=1\*GB3①首先要进行源码的一个安装,在目录有个_install,执行如下命令进行安装:$makeinstall=2\*GB3②在安装完成后,进入到_install目录,创建一些要用到的目录,具体的目录创建如下:$mkdirdevetcmntprocvartmpsysroot;=3\*GB3③接着将工具链中的库需要拷贝到_install目录下,实现工具链的可用,其操作如下:$cp/home/farsight/toolchain/arm-none-linux-gnueabi/lib./; =4\*GB3④接着要对库进行瘦身,删除lib目录下所有.o文件和.a文件,执行的如下命令:$arm-none-gnueabi-striplib/*;=5\*GB3⑤最后要在添加系统启动文件,在etc下添加文件inittab文件,在etc下添加fstab文件。此时根文件系统已经制作完成,接着需要添加内核对根文件系统的支持。(3)添加内核的支持,具体配置如图3-2所示。图3-2内核配置图(4)创建设备文件根文件系统中有一个设备节点是必须的,在dev目录下创建console节点,其具体操作为:$mknoddev/consolec51(5)挂载测试将我们的文件系统拷贝到/opt/filesystem目录下,cp_install/opt/filesystem–a,重新启动开发板,查看是否可以正常挂载。3.6NFS网络文件系统的建立NFS网络文件系统可以使得系统调试开发更容易进行,只需要将经过交叉编译器编译之后生成的可执行文件通过NFS挂载到板子上为调试做好准备,避免反复的烧写可执行文件到FLASH中[15],造成时间浪费和FlASH寿命的缩短。 (1)安装NFSserver端口映射和服务,首先需要下载相应的包,接着进行端口的映射,其命令如下:$sudoapt-getinstallnfs-kernel-servernfs-commonportmap$sudodpkg-reconfigureportmap,执行完后,在出现提示的时候,选定“不将portmap绑定在loopback地址”;(2)通过查看/etc/default/portmap,确保#OPTIONS="-i"前面的#号被添加了,重启portmap服务:$sudo/etc/init.d/portmaprestart;(3)编辑/etc/exports文件,添加目标系统的根文件系统映射目录,此时需要将目标系统的根文件系统最后映射到/opt/filesytem,在/etc/exports文件的最后添加如下内容:/opt/filesystem*(subtree_check,rw,no_root_squash,async)(4)重启NFS服务,并更新,其执行的命令为:$sudo/etc/init.d/nfs-kernel-serverrestart,接着进行的操作为:$sudoexportfs–a,执行完后此时就基本上可以实现NFS服务;(5)测试NFS服务,将主机上的共享目录mount到自己另外一个目录下,如:mount25:/home/farsight/toolchain/mnt,然后查看/mnt目录下是否有/home/farsigh/toolchain目录下的文件,如果有的话,则NFS服务启动成功。3.7TFTP服务的配置(1)TFTP[16]服务可以用来在开发板和主机之间进行传输内核,对TFTP服务的配置是必不可少的,具体配置如下:$sudomkdir/tftpboot$cpuImage/tftpboot$sudochmod777/tftpboot-R$sudoapt-getinstalltftptftpd$sudoapt-getinstallopenbsd-inetd$sudovi/etc/inetd.conf在f文件中填入如下一行:tftpdgramudpwaitnobody/usr/sbin/tcpd/usr/sbin/in.tftpd/tftpboot修改/etc/default/tftpd-hpa下的文件为如下内容:#Defaultsfortftpd-hpaRUN_DAEMON="yes"OPTIONS="-l-s/tftpboot”$sudo/etc/init.d/openbsd-inetdreload$sudo/etc/init.d/openbsd-inetdrestart(2)TFTP服务的测试进入内核目录下将已经编译好的内核镜像拷贝到tftp目录下,即/tftpboot。执行cparch/arm/boot/zImage/tftpboot进入/home/farsight目录,在终端输入,接着执行tftp>getzImage,如果tftp服务配置成功后会在当前目录下会看到zImage镜像文件了。3.8本章小结一个好的嵌入式开发平台是进行后续开发的一个重要基础,它在整个嵌入式系统开发的过程中起着非常重要的作用。本章主要阐述了嵌入式ARM-Linux开发平台的搭建。具体的介绍了交叉编译工具链的建立,嵌入式Linux操作系统的裁剪和移植,U-boot制作与移植,以及网络文件系统、TFTP服务的搭建,为后续的开发以及调试打好基础。4系统设计进入了系统设计阶段,要把软件“做什么”的问题变换成“怎么做”的问题。要将需求分析阶段生成后的文件做进一步的分析和精化。描述软件的总体体系结构,称为软件概要设计。然后对结构进一步细化,称为详细设计。本章主要介绍系统详细设计。4.1系统概要设计软件总体结构的设计是概要设计关键的一步,直接影响到详细设计与编码的工作,所以要采用一定的设计方法,选取合理的设计方案。4.1.1系统功能说明4.1.2系统总体功能结构总体功能结构如图4-1所示。电子书阅读器电子书阅读器上下翻行显示上下翻页显示放大字体缩小字体改变字体颜色图4-1系统功能模块图4.2系统详细设计 在数据模块中的整体开发流程如图4-2所示。得到文件大小并申请空间得到文件大小并申请空间语言编码初始化SDL初始化编码判断设置当前偏移创建主窗口解析文件编码准备命令等待图4-2整体开发流程图在主函数中的整体开发流程中的具体实现步骤和方法如下:(1)读出文件的大小,利用全局的文件大小变量以及Unicode编码大小变量,为变量申请相应的空间;(2)因开发中要用到SDL库,在利用函数库之前要对其进行初始化操作;(3)初始化语言编码指针,为编码解析做好准备;(4)判断文件所采用的编码方式;(5)根据文件的编码方式,若编码采用的非Unicode编码,则将字符编码转换为Unicode编码;若为Unicode编码,不进行转换;(6)设置文件的当前偏移量;(7)创建主窗口;(8)进入等待接受命令状态,进行相应的处理。。在SDL窗口创建成功之后,窗口利用轮询机制来接收发送过来的消息,此接收机制同样采用的方法是利用了SDL函数库,此函数是SDL_PollEvent(&event),,其中的按键对应的是SDL库中的命令,如果当有按键按下时,要根据按键的类型进行区别,即event.type。当按键类型是SDL_KEYDOWN时,在此利用到的几个按键分别对应:(1)SDLK_UP,即方向键中的向上键,显示上一页;(2)SDLK_DOWN,即方向键中的向下键,显示下一页;(3)SDLK_LEFT,即方向键中的向左键,显示上一行;(4)SDLK_RIGHT,即方向键中的向右键,显示下一行;(5)SDLK_LCTRL,即空格左边键左边的Ctrl键,退出程序;(6)SDLK_LALT,即空格左边的Alt键,放大显示。如果按键类型是SDL_QUIT时,则进行退出操作,和按空格左边Alt键的功能一样,。退出上一行显示创建窗口退出上一行显示创建窗口轮询接收命令向上键按下向下键按下向左键按下向右键按下Alt键按下左Ctrl键按下上一行显示上一行显示字体放大或缩小上一行显示 图4-5命令模块流程图编码解析模块功能如图4-6所示。Gb18030准备Gb18030准备 Utf-8取得编码方式Utf-8取得编码方式Utf-16Utf-16Unicode编码Unicode编码ISO8859-1 否ISO8859-1 是 Gb2312不需格式转换Gb2312不需格式转换转换为Unicode转换为Unicode完成完成图4-6编码格式转换流程图根据编码标准,所有的字符集若要正确显示出来,都必须将非Unicode编码格式转换为Unicode编码。根据得出的字符集编码方式,如果是Unicode编码,不要进行转换。在非Unicode编码的情况下再继续判断,如果是Utf-8编码,进行单独的转换,否则对相应的语言编码进行相应的编码转换,该转换都是对相应的编码二进制表将其读取。根据Utf-8的字符编码的规定,Utf-8编码的转换步骤和方法如下:(1)在ASCII码范围内的字符,即小于0x80的字符编码,可直接支持显示,不用进行编码的解码;(2)在0x80到0x7FF的范围内,要Utf-8编码形式为高字节为110xxxxxx,低字节为10xxxxxx,将高字节中的110抽去,低字节的10抽去,最后剩下的就是Unicode编码;(3)在0x800到0x7FFF的范围内,Utf-8的编码形式为1110xxxx10xxxxxx10xxxxxx,用同样的方法将Utf-8前端的标示符抽去,剩下的经过组合成Unicode编码。总体来说,在非Unicode编码中只有Utf-8编码有规律可找,其他编码形式都要经过查表来进行解码。在接收到命令后,可以向上翻页,向下翻页,上一行,下一行,其实现原理类似,分析向下行显示,功能实现流程如图4-7所示。接收到右键填充背景到屏幕设置当前偏移量接收到右键填充背景到屏幕设置当前偏移量当前偏移当前偏移>0设置下一页下一行的偏移量传送字符串到屏幕设置下一页下一行的偏移量传送字符串到屏幕否刷屏 是刷屏设置上一页上一行的偏移设置上一页上一行的偏移图4-7下一行显示流程图当系统接收到向下行显示的命令后,具体的实现步骤如下:(1)填充背景到屏幕;(2)设置当前偏移为下一行偏移,画出下一行;(3)判断是否到屏幕末以及文件末;(4)设置下一行下一页的偏移;(5)设置上一行上一页的偏移;(6)刷新屏幕。4.3软件运行环境4.4本章小结5系统实现5.1系统关键技术实现TXT电子书阅读器的开发,主要用到的技术就是SDL,SDL(SimpleDirectMediaLayer)是一套开放源代码的跨平台多媒体开发函数库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函式,让开发者只要用相同或是相似的程序码就可以开发出跨多个平台(Linux、Windows、MacOSX等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。SDL的功能侦测当前系统的字节序,快速转换数据的函数,读写指定字节序的数据。SDL支持的系统如下:Linux视频显示使用X11,利用XFree86DGA扩展的优势,全屏显示使用新的wMTRR加速,声音使用OSSAPI,使用clone()系统调用和SysVIPC,或者glibc-2.1的pthreads实现线程。音频回放采用BSoundPlayerAPI。5.1.2SDL开发基本介绍(2)视频(3)事件SDL中支持的事件主要包括等待事件和事件轮询,前者等待事件采用的调用函数为SDL_WaitEvent();而在5.2编码实现 编码的实现主要包括主函数实现、字符编码的解码实现、TXT主窗口的创建、等待命令、翻页显示等。主函数的实现5.2.2字符编码解码的实现Utf-8编码,gb18030编码,big5编码,iso-8859编码体系,Unicode编码,如果文件所采用的编码格式本身就是Unicode编码,那么不需要进行编码解析就能直接正确读取数据出来,而非Unicode编码时,分2种情况来分析,一种是针对Utf-8编码体系的,因该编码可以找到规律,故分开来对待,其他的编码体系都是相似的解码方法,都是从编码体系-Unicode编码表中查询得到。表5-1Utf-8Unicode关系表根据以上表中给出的Utf-8与Unicode的关系,以下是对Utf-8字符集编码的解析的主要代码。5.2.3TXT主窗口实现5.2.4命令循环实现5.2.5翻页显示因有上下翻页,上下行显示,上下翻页原理是一样的,其主要思想就是不断改变当前的偏移为上、下页的偏移或者是相应的上、下行的偏移,最后更新窗口。以下为向下翻页的代码:5.2.6字体放大显示字体的放大显示和缩小显示的方法类似,下面为字体放大显示的主要代码。voidprocess_zoom(){ if(pgtxt->zoom>=11) //总共设置的字体大小为12个 pgtxt->zoom=0; else pgtxt->zoom++; TTF_CloseFont(font); //关闭当前的字体 //Openthenewfontsize font=TTF_OpenFont(DEFAULT_TTF_PATH,font_table[pgtxt->zoom]); txt_main_window_free(); //释放当前主窗口 main_window_update(); //更新主窗口}5.3本章小结 SDL知识点是整个开发过程必不或缺的,真个开发都是基于SDL库来开发的,了解SDL基本概念和功能是整个程序开发首要也是最重要的条件。本章从SDL的概念首先出发,讲述了什么是SDL,SDL的功能,简单讲述了SDL的基本开发模版,然后详细介绍了整个编码的思想,包括主函数中主要开发流程、TXT主窗口的创建思想,根据命令接收分别进行上下翻页,上下行翻行,退出,改变字体颜色,以及放大、缩小字体等操作。6程序移植与验证6.1移植需求 移植程序与测试是整个过程的最后的环节,也是至关重要的一个环节,决定了系统是否能运行在开发板上,是否可以进行电子书的阅读。在进行移植程序之前有必要对程序的移植做个移植需求分析,可以避免在移植过程中出现一些没必要的疏忽。 TXT电子书阅读器开发是基于SDL的开发,在运行程序

温馨提示

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

评论

0/150

提交评论