韦东山 数码相框之系统框架分析笔记

韦东山 数码相框之系统框架分析

  1. 拿到项目,先弄清需求

    • 参考手机相册

    • 可以想象我们的操作过程都需要用到哪些功能

      1. 上电,LCD显示一幅界面

      2. 根据配置文件,决定停留在当前界面还是自动切换显示下一幅图片

      3. 点击一下,出现菜单(对话框)

        • 手动显示

        • 自动显示

      4. 手动显示下,向左向右滑动切换显示不同图片

      5. 向上滑动 - 放大图片, 向下滑动 - 缩小图片

        • 或者可以两个手指操作放大缩小
      6. 左右移动非常快的时候,显示下下一幅图片

        扫描二维码关注公众号,回复: 11857613 查看本文章
  2. 设计框架

    • 对软件各个性能了解
    • 设计文档,将项目、程序分成几部分
    • 各个部分的接口构造好
    • 我们应该具备设计框架的功力
    tslib
    no lib
    上报
    触摸屏
    封装
    按键
    ...
    输入进程
    时间
    类型
    数据
    点击
    移动
    位置
    方向/速度/幅度
    输入进程-封装事件

    注释:封装将触摸屏/按键等硬件操作封装成事件,选着不同硬件时只需修改封装的事件即可,提高可移植性

socket
输入进程
显示进程
进程数据传输
  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等驱动**

  使用进程,为了保持输入和显示的独立;使用线程,为了保持不同线程间的独立并且可以共享一些资源
  1. 编写代码

  2. 测试功能

两个方面
专家
系统
对某个/某一类问题钻研的很深
对系统的各个部分都有较深的理解,也称为系统架构师
嵌入式工程师发展方向

链接:韦东山_嵌入式Linux_第3期_Linux项目实战视频教程_免费试看版

猜你喜欢

转载自blog.csdn.net/weixin_41629848/article/details/105933829