拿到一个项目,首先得搞清楚以下四个方面
1. 弄清需求
2. 设计框架
3. 编写代码
4. 测试
对于项目的需求有以下几个方面:
1. 上电,LCD显示一副界面
2. 根据配置文件,决定停留在当前界面,还是自动的先试下一幅
3.点击一下,出现一个对话框(一开始的默认配置可能是自动显示),
我们可以选择手动显示还是自动显示
—————————————————————————
| 手动显示 自动显示 |
| |
|————————————————————————
4. 显示过程中,点击屏幕,根据上下左右{ 放大、缩小、显示下一幅 }
5. 左右移动很快时,显示下下一幅
接下来讲设计框架,讲其设计的性能强一点,漂亮一点:
那么将程序分为2个部分:
1. 输入进程 2. 显示进程(是个程序,并创建多个线程)
socket 7个线程
输入进程 ———————————————————————————> 接收socket 主控 当前 左 右 上 下
(输入进程只管把数据通过socket发送出去.) 准备 准备 准备好 准备好
| | 左边 右边 放大的 放大的
上报 2个线程不断地读取触摸屏 图片 图片 图片 图片
| 和按键的数据,并上报给主线程 |
—————————————————————————
| 事件 使用libjpeg将JPEG图片解压出
时间 | 来,存在framebuffer显存中,
封装某些函数{ 类型(点击,移动) 对每一幅都分配一块内存
数据(方向,速度,幅度) —————————————————————————
————————————————————————————————— | | | | |
|可以方便取触摸屏 |
触摸屏线程 和按键的数据 按键线程 | | | | |
| |
tslib | | | | | |
(操作触摸屏)) |
| | | | |
操作系统(含有驱动程序) mmap mmap mmap mmap mmap
———————————————————————————————————————————————————————————————————————————————————————
(主控决定要显示当前的图像时,通过DMA传输到显存中)
DMA
显存<———————内存 内存 内存 内存 内存
|
———————————————————————————————————————————————————————————————————————————————————————
硬件: (通过显存里的数据直接在LCD上显示,如果我们左移
的话,会把左移准备的内存数据通过DMA传输到显
存中,那么此时左移后的图像,即便为当前显示图
片,同理,其他点击原理一样)
触摸屏 按键 LCD
总结:
输入进程 :
主控线程:得到上报的事件,用socket发出
TS线程: 使用tslib读TS,封装事件,上报
按键线程: 读按键,封装事件,上报
显示进程:
放大线程:准备好当前图片的放大数据
缩小线程:准备好当前图片的缩小数据
上一幅线程:准备好上一幅图片
下一幅线程:准备好下一幅图片
当前图片线程:准备好当前图片
主控:根据得到的时间,决定显示哪一幅
驱动:分配5块内存,DMA操作,mmap