文件浏览器_数码相框项目总结 (上)

来源:互联网 发布:云桌面软件 编辑:程序博客网 时间:2024/05/15 02:04
   趁着闲余时间我们一起重温下这个项目,通过这个项目来复习一些知识,正是我这次总结的目的。---雪松(●'◡'●)

让我们一起来做 韦东山老师 第三期项目:文件浏览器_数码相框 项目吧


功能需求:

  1. 在JZ2440 LCD上显示电子书文件,可解析的电子书文件编码格式支 持UTF-8、 UTF-16le、UTF-16be、GBK、ASCII。
  2. 字符显示:矢量字体。(Freetype实现任意放大或缩小字体)
  3. 可将电子书远程打印到电脑终端上。(socket编程)
  4. 在JZ2440 上实现数码相框。
  5. libgpej 的使用

流程:

1、使用encoding_manage.c 来解析文件,获得编码
2、使用font_manager.c 来处理编码,获得字体点阵
3、使用display_manager.c 来输出点阵
这里写图片描述


前期要学习知识汇总:

  1. 了解u-boot启动流程
  2. 了解内核启动流程
  3. 了解根文件驱动流程
  4. 网络编程
  5. 多线程编程
  6. makefile的编写
  7. 单链表操作&函数指针
  8. 字符编码

分享几个不错的总结图解。

1、u-boot启动流程

这里写图片描述

移植部分 见下次博客


2、内核启动流程

这里写图片描述


3、根文件系统启动流程

这里写图片描述


4、网络编程

对于熟悉TCP/UDP 的同学 下面两个图应该很熟悉。

无连接的socket工作过程
无连接的socket'

有连接的socket工作过程
这里写图片描述


5、多线程编程

http://blog.csdn.net/monkey_d_meng/article/details/5628663
推荐个不错的博客总结


6、makefile的编写

一、各级子目录的Makefile:
它最简单,形式如下:
obj-y += file.o
obj-y += subdir/

“obj-y += file.o”表示把当前目录下的file.c编进程序里,
“obj-y += subdir/”表示要进入subdir这个子目录下去寻找文件来编进程序里,是哪些文件由subdir目录下的Makefile决定。

二、顶层目录的Makefile:
它除了定义obj-y来指定根目录下要编进程序去的文件、子目录外,主要是定义工具链、编译参数、链接参数──就是文件中用export导出的各变量。

三、顶层目录的Makefile.build:
这是最复杂的部分,它的功能就是把某个目录及它的所有子目录中、需要编进程序去的文件都编译出来,打包为built-in.o

四、怎么使用这套Makefile:
1.把顶层Makefile, Makefile.build放入程序的顶层目录
2.修改顶层Makefile
2.1 修改工具链
2.2 修改编译选项、链接选项
2.3 修改obj-y决定顶层目录下哪些文件、哪些子目录被编进程序
2.4 修改TARGET,这是用来指定编译出来的程序的名字

  1. 在各一个子目录下都建一个Makefile,形式为:
    obj-y += file1.o
    obj-y += file2.o
    obj-y += subdir1/
    obj-y += subdir2/

  2. 执行”make”来编译,执行”make clean”来清除,执行”make distclean”来彻底清除

    http://www.cnblogs.com/amanlikethis/p/3675486.html
    讲解了内核makefile结构,很详细。


7、单链表操作&函数指针

7.1、单链表的操作
单链表的概念:

    data    +  next    数据域     指针域

单链表的构造:
创建头节点 、增加节点、修改节点、查询节点 、删除节点 、释放节点

   节点结构:    typedef    int  datatype;    typedef  struct _node_    {        datatype        data;        struct _node_ * next;    }linknode;

我这里就只贴一个 增加节点
尾部增加法:
tmp= L;
while(tmp->next)
{
tmp= tmp->next
}
tmp->next = node;

让我们看看项目代码:
这里写图片描述

这里写图片描述


7.2、函数指针:
函数指针在项目中大量运用,我们一起分析下项目中的这个定义。

int (*GetFontBitmap(unsigned int dwCode, PT_FontBitMap ptFontBitMap))

函数指针是存放函数的地址的指针,函数地址是一个函数的入口地址。

当一个函数指针指向了一个函数,就可以通过这个指针来调用该函数,可以将函数作为参数传递给函数指针。

函数指针声明方式:

<数据类型> (*<函数的指针名称>)(<参数说明列表>)


8、字符编码

分类:
GBK —> 内地(gb2312)
BIG5 —>港澳台
ASCII —>二进制码

目的:为了统一数值和某个字符的关系。
结果:Unicode编码表—>(用三个字节表示一个unicode码)(过于浪费出现了)
表示方法:
UTF-8——>(前段EF BB BF)(容错性)
UTF-16le(小端)
UTF-16be(大端)

这里重点说下UTF-8
这里写图片描述

———未完待续