




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- DB31/T 1404-2023稻秸稈栽培大球蓋菇技術規程
- DB31/T 1382-2022蜜蜂授粉管理技術規范
- DB31/T 1334-2021居民經濟狀況核對工作規范
- DB31/T 1269-2020車輛盲區監測系統的性能要求與測試方法
- DB31/T 1137-2019畜禽糞便生態還田技術規范
- DB31/T 1049-2017獸醫緊急流行病學調查技術規范
- 2025關于企業內部員工借款合同模板
- 釀造企業產品差異化策略考核試卷
- 氣壓動力機械在水處理設備中的應用考核試卷
- 2024年對苯二甲酸項目投資申請報告代可行性研究報告
- 2025年福建福州左海供應鏈集團有限公司招聘筆試參考題庫附帶答案詳解
- 2024年濟南產業發展投資集團有限公司招聘真題
- 2024年棗莊市滕州市中小學招聘教師筆試真題
- 2025年工程財務分析試題及答案
- 小學校園文化方案
- 財政與金融練習試卷1(共230題)
- 2025年醫院管理培訓考試試題及答案
- 大學生思想政治教育課件教學
- 北京市公路貨運車輛不停車檢測系統設施設備運維定額2025
- 生產經營單位事故隱患內部報告獎勵機制實踐
- 全國縣中頭雁教師崗位計劃人員推表
評論
0/150
提交評論