韦东山 数码相框之系统框架分析
-
拿到项目,先弄清需求
-
参考手机相册
-
可以想象我们的操作过程都需要用到哪些功能
-
-
上电,LCD显示一幅界面
-
根据配置文件,决定停留在当前界面还是自动切换显示下一幅图片
-
点击一下,出现菜单(对话框)
-
手动显示
-
自动显示
-
-
手动显示下,向左向右滑动切换显示不同图片
-
向上滑动 - 放大图片, 向下滑动 - 缩小图片
- 或者可以两个手指操作放大缩小
-
左右移动非常快的时候,显示下下一幅图片
-
-
-
设计框架
- 对软件各个性能了解
- 设计文档,将项目、程序分成几部分
- 各个部分的接口构造好
- 我们应该具备设计框架的功力
注释:封装将触摸屏/按键等硬件操作封装成事件,选着不同硬件时只需修改封装的事件即可,提高可移植性
graph TB
ps3[显示进程]
t1[接收socket]
tm[主控]
t2[当前显示]
t3[左边图片]
t4[右边图片]
t5[上 放大]
t6[下 缩小]
ps3-->t1
ps3-->t2
ps3-->t3
ps3-->t4
ps3-->t5
ps3-->t6
ps3-->tm
t2-->libjpeg
t3-->|准备好左边图片| libjpeg
t4-->|准备好右边图片| libjpeg
t5-->|准备好放大的图片| libjpeg
t6-->|准备好缩小的图片| libjpeg
libjpeg-.mmap.-mem1[内存-当前]
libjpeg-.-mem2[内存-左]
libjpeg-.-mem3[内存-右]
libjpeg-.-mem4[内存-放大]
libjpeg-.-mem5[内存-缩小]
mem1-->DMA
mem2-->DMA
mem3-->DMA
mem4-->DMA
mem5-->DMA
tm-->ctr{要显示哪一幅图片?}
ctr-->|当前| mem1
ctr-->mem2
ctr-->mem3
ctr-->mem4
ctr-->mem5
DMA-->LCD
subgraph
LCD[显存 LCD]
end
总结:
1. 输入进程
- 主控线程:得到上报的事件,用socket发出给显示进程
- ts线程:使用tslib读触摸屏ts,封装事件,上报
- 按键线程:读按键,封装按键事件,上报
2. 显示进程
- socket接收线程:接收socket数据
- 放大线程:准备好当前图片的放大图片数据
- 缩小线程:准备好当前图片的缩小数据
- 上一幅线程:准备好上一幅图片
- 下一幅线程:准备好下一幅图片
- 当前图片线程:准备好当前图片
- 主控线程:根据根据socket得到的事件,决定显示哪一幅
3. 驱动程序
- 触摸屏驱动
- 按键驱动
- LCD驱动
- **分配5块内存、DMA操作、mmap等驱动**
使用进程,为了保持输入和显示的独立;使用线程,为了保持不同线程间的独立并且可以共享一些资源
-
编写代码
-
测试功能