前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >嵌入式Linux系统驱动之单Buffer的缺点与改进方法

嵌入式Linux系统驱动之单Buffer的缺点与改进方法

作者头像
韦东山
发布2021-12-08 10:36:46
8600
发布2021-12-08 10:36:46
举报
文章被收录于专栏:韦东山嵌入式

资料下载

coding无法使用浏览器打开,必须用git工具下载:

代码语言:javascript
复制
git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git

视频观看

百问网驱动大全

单Buffer的缺点与改进方法

参考资料,GIT仓库里:

  • 内核自带的LCD驱动程序
    • IMX6ULL驱动源码:Linux-4.9.88\drivers\video\fbdev\mxsfb.c
    • STM32MP157的驱动程序是基于GPU的,在Linux-5.4里没有mxsfb.c,可以参考另一个:
      • Linux-5.4\drivers\video\fbdev\goldfishfb.c
    • 在视频里基于IMX6ULL的mxsfb.c来讲解,我们把这个驱动程序也放到GIT仓库里
      • IMX6ULL\source\03_LCD\12_lcd_drv_imx6ull_from_kernel_4.9.88
      • STM32MP157\source\A7\03_LCD\12_lcd_drv_imx6ull_from_kernel_4.9.88
    • 使用多buffer的APP参考程序,在GIT仓库中
      • IMX6ULL\source\03_LCD\13_multi_framebuffer_example\testcamera
      • STM32MP157\source\A7\03_LCD\13_multi_framebuffer_example\testcamera

1. 单Buffer的缺点

  • 如果APP速度很慢,可以看到它在LCD上缓慢绘制图案
  • 即使APP速度很高,LCD控制器不断从Framebuffer中读取数据来显示,而APP不断把数据写入Framebuffer
    • 假设APP想把LCD显示为整屏幕的蓝色、红色
    • 很大几率出现这种情况:
      • LCD控制器读取Framebuffer数据,读到一半时,在LCD上显示了半屏幕的蓝色
      • 这是APP非常高效地把整个Framebuffer的数据都改为了红色
      • LCD控制器继续读取数据,于是LCD上就会显示半屏幕蓝色、半屏幕红色
      • 人眼就会感觉到屏幕闪烁、撕裂
在这里插入图片描述
在这里插入图片描述

2. 使用多Buffer来改进

上述两个缺点的根源是一致的:Framebuffer中的数据还没准备好整帧数据,就被LCD控制器使用了。 使用双buffer甚至多buffer可以解决这个问题:

  • 假设有2个Framebuffer:FB0、FB1
  • LCD控制器正在读取FB0
  • APP写FB1
  • 写好FB1后,让LCD控制器切换到FB1
  • APP写FB0
  • 写好FB0后,让LCD控制器切换到FB0

3. 内核驱动程序、APP互相配合使用多buffer

流程如下:

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/08/25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 资料下载
  • 视频观看
  • 单Buffer的缺点与改进方法
    • 1. 单Buffer的缺点
      • 2. 使用多Buffer来改进
        • 3. 内核驱动程序、APP互相配合使用多buffer
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档