基于嵌入式的TXT电子书阅读 - 图文(6)

2019-04-02 09:38

信息科学与技术学院学士学位论文

根据编码标准,所有的字符集若要正确显示出来,都必须将非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的编码形式为1110xxxx 10xxxxxx 10xxxxxx,用同样的方法将Utf-8前端的标示符抽去,剩下的经过组合成Unicode编码。

总体来说,在非Unicode编码中只有Utf-8编码有规律可找,其他编码形式都要经过查表来进行解码。

在接收到命令后,可以向上翻页,向下翻页,上一行,下一行,其实现原理类似,分析向下行显示,功能实现流程如图4-7所示。

接收到右键 填充背景到屏幕 设置当前偏移量 否 是 当前偏移>0 设置下一页下一行的偏移量 传送字符串到屏幕 刷屏 设置上一页上一行的偏移 图4-7 下一行显示流程图

21

信息科学与技术学院学士学位论文

当系统接收到向下行显示的命令后,具体的实现步骤如下: (1)填充背景到屏幕;

(2)设置当前偏移为下一行偏移,画出下一行; (3)判断是否到屏幕末以及文件末; (4)设置下一行下一页的偏移; (5)设置上一行上一页的偏移; (6)刷新屏幕。

4.3 软件运行环境

为了保证系统运行的可靠性,对于软件的运行环境具有一定的要求。软件的运行环境分为硬件环境和软件环境。

(1)硬件开发环境 PC机

处理器:基于ARM920T内核的S3C2410处理器 内存: 64MB以上 FS2410 开发板 (2)软件环境

Ubuntu Linux10.04操作系统 Windows 98/2000/XP操作系统(可选) 嵌入式Linux开发环境

4.4 本章小结

系统设计是每个系统的灵魂所在,这一章主要阐述系统的功能设计,通过对系统设计的两个功能模块,即命令模式功能和数据模式功能,数据模块功能可以基本从大局上掌握系统的框架。系统设计这是整个系统的核心,它直接展示了系统的功能实现方法和原理以及整个系统的控制流。

22

信息科学与技术学院学士学位论文

5 系统实现

5.1系统关键技术

实现TXT电子书阅读器的开发,主要用到的技术就是SDL,SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发函数库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函式,让开发者只要用相同或是相似的程序码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。 5.1.1 SDL的功能

(1)视频

可设置8bpp或更高的任意色彩深度的视频模式。如果某个模式硬件不支持,可以选择转化为另一模式,支持可以直接写入线性的图像帧缓冲(framebuffer),用颜色键值(colorkey)或者alpha混合属性创建surface,将surface显示到屏幕上。

Surface的blit能自动的转化为目标格式。blit是优化过的,并能使用硬件加 速。x86平台上有针对MMX优化过的blit,硬件加速的blit和fill(填充)操作,如果硬件支持的话。

(2)事件

当应用程序的visibility发生改变的事情,主要检测到的事件主要有:键盘输入 、和鼠标输入,当用户要求的退出的时候调用SDL_QUIT() 函数实现退出应用程序,每种事件都能通过SDL_EventState()关闭或者打开,事件经由用户指定的过滤函数再被加入到内部的事件队列,可支持线程安全的事件队列。

(3)音频

可以设置8位和16位的音频,单声道或者立体声,如果格式硬件不支持,可以选择进行转换,由独立的线程执行音频部分,并提供用户回调(callback)机制。

23

信息科学与技术学院学士学位论文

设计上考虑到了客户定制的软混音器,但实际上在例程中就包含了一个完整的音频/音乐输出库。

(4)CD音频

具有完整的CD音频控制API。 (5)线程

简单的线程创建API ,可用于同步的简单的二进制信号量(semaphores)。 (6)定时器

可读取已流逝的毫秒数或等待指定的毫秒数,可支持设置一个10毫秒精度的周期性定时器。

(7)字节序无关

侦测当前系统的字节序 ,快速转换数据的函数,读写指定字节序的数据。 SDL支持的系统如下: (1)Linux

视频显示使用X11,利用XFree86 DGA扩展的优势,全屏显示使用新的w MTRR加速,声音使用OSS API,使用clone()系统调用和SysV IPC,或者glibc-2.1的pthreads实现线程。

(2)Win32

有两个版本,一个是适合所有基于Win32的系统的安全版本,另一个是基于DirectX的高性能版本,安全版本的视频显示采用GDI。高性能版本采用DirectDraw,并可支持硬件加速,安全版本的音频回放采用waveOut API。高性能版本采用DirectSound。

(3)BeOS

视频显示采用Bwindow,音频回放采用BSoundPlayer API。 5.1.2 SDL开发基本介绍

(1)初始化库

24

信息科学与技术学院学士学位论文

调用SDL_Init()动态的加载和初始化SDL库,该函数带有一组标记来表示哪部分需要激活:SDL_INIT_AUDIO 、SDL_INIT_VIDEO、SDL_INIT_CDROM、SDL_INIT_TIMER,或者是采用SDL_INIT_EVERYTHNG,在使用完毕SDL最后调用SDL_Quit()函数来完成退出操作。

(2)视频

简便的选择和设置视频模式,可实现在屏幕上绘制像素,该功能主要可以通过直接写入图形帧缓冲(framebuffer)和调用屏幕更新函数来绘制屏幕并刷新,另外也可以实现加载和显示图片的功能。在SDL中只提供了SDL_LoadBMP()函数以及SDL_BlitSurface()函数将图片blit进图形帧缓冲,从而显示图片,SDL_BlitSurface()自动对blit矩形进行裁边,blit矩形在调用SDL_UpdateRects()时被用作更新屏幕变化了的部分。

(3)事件

SDL中支持的事件主要包括等待事件和事件轮询,前者等待事件采用的调用函数为SDL_WaitEvent();而在事件轮询中调用SDL_PollEvent()函数可实现对按键以及鼠标事件输入的轮询判断。

5.2 编码实现

编码的实现主要包括主函数实现、字符编码的解码实现、TXT主窗口的创建、等待命令、翻页显示等。 5.2.1 主函数的实现

主函数是整个程序的灵魂,涵盖了主要的设计思路,其主要设计思路为: (1)读取电子书的大小,分配相应的空间;

(2)分析传入的参数是否合理,设置放大率,旋转和偏移量; (3)初始化有关SDL资源; (4)语言编码初始化;

(5)根据文件得到字符集编码格式;

25


基于嵌入式的TXT电子书阅读 - 图文(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:汇编课程设计

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: