logo资料库

韦东山学员决狐疑第三期第一个项目数码相框学习笔记.pdf

第1页 / 共360页
第2页 / 共360页
第3页 / 共360页
第4页 / 共360页
第5页 / 共360页
第6页 / 共360页
第7页 / 共360页
第8页 / 共360页
资料共360页,剩余部分请下载后查看
第三期第一个项目--数码相框
第 1 课第 1 节_数码相框之系统框架_P
第 1 课第 2.1 节_数码相框_字符的编码方式_P
第 1 课第 2.2 节_数码相框_字符的点阵显示_P
第 1 课第 2.3.1 节_数码相框_freetype 理论介绍_P
第 1 课第 2.3.2 节_数码相框_在 PC 上测试 freetype_P
给定字符大小,计算一个字符用多少像素表示:
字符旋转:
下面想要在 PC 上显示中文:
宽字符:
深入理解:
打 印 xMin , xMax , yMin , yMax :
第 1 课第 2.3.3 节_数码相框_在 LCD 上显示一个矢量字体_P
1.1:交叉编译 freetype 库
先看看编译出来的头文件应该放在哪个目录:
再看看编译出来的库文件应该放在哪里呢?
在 LCD 上面显示矢量字体
在 LCD 上面显示文字并显示一个角度代码见:
第 1 课第 2.3.4 节_数码相框_在 LCD 上显示多行文字_P
b. 居中显示两行文字
第 1 课第 3.1 节_数码相框_额外项目_电子书之效果及框架_P
显示一个文本文件:
在 MINI2440 下体验编译:
显示一本国标码编码方式保存的电子书:
在 TQ2440 下体验编译:
下面开始讲解电子书程序:
电子书程序框架:
模块分图:
字体点阵模块:
提取文件编码模块:
第 1 课第 3.2 节_数码相框_额外项目_电子书之代码阅读及编写_P
显示器模块实现大致思路 :
字体点阵模块大致思路:
下面先讲 freetype 单色图 MONO 是怎么根据编码值得到字体的点阵: 详见代码:
提取文件编码模块大致思路:
分 析 main.c :
分 析 Draw.c :
第 1 课第 3.3 节_数码相框_额外项目_电子书之指针的操作_P
第 1 课第 3.4 节_数码相框_额外项目_电子书之链表的操作_P
第 1 课第 3.5 节_数码相框_额外项目_电子书之在 PC 上显示_P
给 svgalib 源码打补丁: 解压:
第 1 课第 4 节_数码相框_编写通用的 Makefile_P
方 法 b. 写 Makefile
如何自动生成依赖文件并且将自动生成的依赖文件包含到 Makefile
b.怎么把自动生成的依赖文件包含进 Makefile:
下面仔细分析第四个 Makefile:
修改 Makefile,让其能够支持一个工程
子目录 Makefile
注意:
下面重新写 show_files 工程的 Makefile
第 1 课第 5.1 节_数码相框_使用多种方法支持多输入_框架及轮询方式_P
关于stdin.c部分:
关于touchscreen.c部分:
1:初始化函数TouchScreenDevInit:
2:关于获取时间的函数: TouchScreenGetInputEvent
3:向上注册结构体
关于input_manager.c部分:
关于修改main.c
关于makefile
如何查看 CPU 占用率
疑惑
第 1 课第 5.2 节_数码相框_使用多种方法支持多输入_select 方式_P
如何查看 CPU 占用率
第 1 课第 5.3 节_数码相框_使用多种方法支持多输入_多线程_P
三种输入方式的流程比较:
修改代码的步骤:
对于主线程我们要做的是:
下面分析子线程的代码:
如何查看 CPU 占用率
第 1 课第 6.1 节_一小时学会网络编程_两个简单例子_tcp_udp_P
1:为何引入网络编程
2:网络通信介绍
3:普通程序和网络程序流程对比
4:编写网络程序之前的函数使用的说明
4.1:Socket函数原型及参数:
4.2:bind函数:
4.3:listen:
4.4:accept函数:
4.5:connect函数:
5:创建子进程介绍
6:写TCP的server端的代码:
7:编译TCP server端代码
8:写TCP客户端程序
9:编译TCP 客户端程序
10:UDP的服务器和客户端的流程
客户端不写 connect 函数
疑惑:
第 1 课第 6.2 节_修改电子书源码支持远程打印 1_P
我们要实现的功能需求:
框架分析:
代码修改步骤
关于debug_manager.h
关于debug_manager.c
关于stdout.c
关于netprint.c
环形缓冲区自己的理解:
关于debug_manger.c
启动开发板
第 1 课第 7 节_libjpeg 的使用_P
1:2440是如何显示图片的
2:如何让图片显示在LCD上
3:如何解压jpg图片
4:libjpeg的使用介绍
5:编写代码步骤:
6:编译步骤
7:代码改进:实现缩放功能
8:代码改进:实现在LCD上显示图片
第 1 课第 8.1 节_数码相框功能及程序框架_P
1:数码相框功能框架:
2:页面管理模块框架:
3:以main_page.c为例分析结构体
第 1 课第 8.2 节_数码相框程序编写_先写框架_P
第 1 课第 8.3.1 节_数码相框程序编写_图标显示之 bmp 数据提取_P
bmp 文件格式
文件信息头:占 14 个字节
位图信息头:占 40 个字节
关于pic_operation.h
关于bmp.c
第 1 课第 8.3.2 节_数码相框程序编写_图标显示之缩放_P
第 1 课第 8.3.3 节_数码相框程序编写_图标显示之测试_P
原因是未考虑到结构体对齐问题。
Sizeof结构体,由于结构体对齐问题,导致计算结构体错误:
第 1 课第 8.4.1 节_数码相框程序 GUI 编写_MainPage 显存管理_P
step 1:显示页面前的准备工作-显存的分配和获取:
1.1:构造显存链表的结构体
1.2:显存分配函数
1.2.1:将我们自己分配的显存加入显存链表
1.2.2:将LCD实际设备FB显存加入链表
1.3:显存获取函数
step 2:显示页面图标函数框架构思
第 1 课第 8.4.2节_数码相框程序编写_MainPage页面规划_P
Step 1:获得显存
Step 2: 描画数据
2.1判断或得到的显存是否已经存在像素数据
2.2:获得LCD的分辨率
2.3:先确定我们要缩放到什么尺寸
2.4:首张图标在LCD的位置
2.5:提供缩放后的目标图标的图片数据描述结构体
2.6:定义一个图标位置描述结构体
2.7:循环去获取原始图片的像素数据,图标的左边数据,缩放,合并
2.8: 释放空间和修改显存数据状态标志位
Step3: 刷到设备上去
Step4. 解放显存
第 1 课第 8.4.3 节_数码相框程序 GUI 编写_MainPage 输入功能_P
Step1:修改事件类型结构体
Step2:修改输入设备的获取事件函数
Step3:实现对应页面中获取事件并处理的部分
第 1 课第 8.4.4 节_数码相框 GUI 程序编写_MainPage 测试_P
开始从头至尾修改 8.4.3 里的代码
启动开发板
第 1 课第 8.5.1 节_数码相框效果演示及编译使用方法
tslib 编译使用方法解压:
第 1 课第 8.5.2 节_数码相框完整代码的讲解_P
第 1 课第 8.5.3 节_数码相框改进性能_支持中文_P
第 1 课第 8.5.4 节_数码相框课后作业及思路_P
学员 决狐疑 提供的第三期第一个项目学习笔记 , 记录的非常详细 联系方式 1198050358 笔记内容仅供参考 第三期第一个项目--数码相框 第 1 课第 1 节_数码相框之系统框架_P 数码相框看起来功能是挺简单的,但是想把它做好一点都不简单,并且里面涉及的很多编程的思想是有很多普适性的。 拿到一个项目之后,肯定不是一上来就闷头写代码,先做什么事情?的 写程序的方向: 需求分析:
1. 程序框架: 程序框架总结: a.为什么要分输入进程和显示进程呢? 因为我想把输入进程和显示进程两个模块独立出来。 以后想把一个模块独立出来,就为这个模块单独写一个进程。 b.为什么进程里面的模块要称之为线程呢? 处于同一个进程里面的线程可以互相使用线程里面的全局变量。线程之间的优点是它们共 享全局变量。
第 1 课第 2.1 节_数码相框_字符的编码方式_P 2. 显示文字 2.1 文字编码方式
代码见: 第 1 个项目数码相框全部源码_图片_文档\源码(含讲课过程中即时编写的文档)\01.字符编码源码_文档_图片\字符编码\2th utf-8.c ansi.c 同一段代码源文件用不同的编码方式保存,会导致执行结果不一样: 怎么解决?编译程序时,要指定字符集查看 gcc 手 册 :man gcc 搜索 charset :
可以指定输入字符集: 还可以指定编译出来的可执行程序里面的字符是用什么字符集表示的: -finput-charset=charset 表示源文件的编码方式, 默认以 UTF-8 来解析 -fexec-charset=charset 表示可执行程序里的字符以什么编码方式来表示,默认是 UTF-8 gcc -o a a.c // 这里没有指示源文件的编码方式也没有指示生成的可执行程序里的字符以什么编码方式来表示,所以源文件 的编码方式默认以 UTF-8 来解析;可执行程序里的字符默认是 UTF-8 为什么 gcc -o a a.c 没有指定源文件和可执行文件的编码方式,为什么 d6 d0 还是用国标表示呢?不是说默认是 UTF-8 吗? 本来源文件 ansi.c 是以 ASCII 码编码方式保存的,gcc 去读入的时候是用 UTF-8 来解析源文件 ansi.c,解析时发现没有错误,d6 d0 骗过了 gcc 编译器,gcc 编译器误认为 d6 d0 就是 UTF- 8 格式,所以输出的时候输出了 d6 d0。 // -finput-charset=GBK 指定输入字符集 GBK // -fexec-charset=UTF-8 指定输出字符集 UTF-8 gcc -finput-charset=GBK -fexec-charset=UTF-8 -o utf-8_2 ansi.c 与之前 utf-8 编码格式的源文件编译产生的可执行文件输出结果一样:
第 1 课第 2.2 节_数码相框_字符的点阵显示_P 代码见:第 1 个项目数码相框全部源码_图片_文档\源码(含讲课过程中即时编写的文档)\02. 点阵字符显示_源码_文档_图片 \02.dot_font show_font.c 2.2 英文字母、汉字的点阵显示 英文字母的点阵写在程序里,放在一个数组里面汉字的点阵用 HZK16 内存映射 mmap 函数用法: 使用 man 查询:
HZK16: LCD 显示 ASCII 码:
LCD 显示汉字: 拖到 ubuntu 编译: 编译,有一大堆错误:
分享到:
收藏