项目说明:
数码相框项目:看着简单 涉及到的内容是很多的。
项目流程:
- 弄清需求
- 设计框架
- 编写代码
- 测试
发展方向:
专家(某个问题专研深刻)
系统(设计框架功能)
弄清需求:
(1) 上电,LCD显示一副图片
(2) 根据配置文件,决定停留当前界面还是自动显示下一张
(3) 点击一下,出现一个对话框(手动,自动)
(4) 上放大,下缩小,左右切换
(5) 左右移动很快,显示下一张
程序分俩部分
(1)输入进程
封装事件
(2)显示进程:
输入系统通过socket把事件发送到显示进程。多个线程 其中一个线程专门用来接收socket数据。
一个线程准备图片,左划的时候 线程开始准备左边的图片。等等 加快速度
图片存在哪里?用库libjpeg解压图片(解压后可以直接在LCD上显示的格式),然后开一块内存把解压后的图片存在framebuffer中。
LCD有显存framebuffer
主控线程,通过DMA把要显示的图片移动到当前图片的显存中 然后LCD显示。左移时主控通过DMA更新显存。
DMA:传输块 不卡
显示进程大概分7个线程
驱动中分配显存,应用程序用libjpeg是通过mmap使用。
总结:
输入进程把事件发给显示进程,事件怎么来呢 ,可能从触摸屏来也可能是按键来。
那么输入进程也创建多个线程,触摸屏线程,按键线程
触摸屏线程:不停的调用tslib得到触摸屏数据,得到后封装好 上报给主控线程。主控线程收到后发送socket。同理按键线程。方便扩展。显示端的主控线程接受到后决定显示5个图片中的哪一个。
如果显示第一个,主控立刻启动DMA把数据传输给显存进行显示。发现左移 立刻DMA一种最新内容到显存。
总结:
为什么用进程线程呢?
某个功能单独独立出来。方便增删。
全局变量可以在多个线程内使用。