0%

LCD缓冲设计

LCD

这个不论是MCU还是linux软件开发,都是一个非常常用的输出功能,还有就是LCD+电阻组合成触摸显示屏,LCD的原本名称是液晶显示屏,所以博客就说显示功能了。

LCD显示

不论是MCU还是linux,都是调用厂商提供好的lcd代码进行二次开发,也是把项目添加进去,mcu就把源码加入项目编译即可。linux就是添加lcd设备,写好驱动和设备号,等待上层应用调用,这个调用一般都是直接内存映射过去的,这样可以减少毛刺和传输速度慢的问题。

LCD得到数据之后,显示是要一段时间的。所以,主控在发送数据之前,得确保LCD出于空闲状态,此时就会去查询状态,空闲之后才发送数据,lcd接收数据就开始显示,显示完毕之后再回复设置为空闲状态,进行下一轮。

阻塞问题

根据上面这个流程,就可以知道传输是一个问题,但是等待LCD空闲,这个过程导致主控阻塞等待这也是一个重要因素,为了解决这个问题,就可以利用CPU里面得概念了,就是流水线。

双缓冲

问题就出在,显示的过程中,是无法发送数据的,如果,有两个缓冲区是不是就可以一个用于显示一个用于缓冲呢,这样再显示的过程中,就可以立刻发送空闲,让主控去发数据过来,从而节省阻塞时间。

为什么这样节约时间呢?

原因是,主从设备之间处理速度,一般都是比不过设备自身内部处理速度的。主从通信是要握手,是要双方都就绪才是有效的,而设备内部切换和操作就是瞬间的,就是一个顺手的事情。对于LCD来说就是一个切换指针指向的操作,一下子就可以执行完毕了,但是传输过程是需要确认双方状态的,所以,这个过程才是真正卡脖子的过程。

三缓存

就是在双缓冲的基础上面,再加一个缓冲区,进步增加效果和帧率,三缓存就真的真的够用了,再多就有些多余了,这就像电脑玩游戏一样,cpu到了8核之后,继续添加核心基本没有提升的,就是到了瓶颈了。

总结

缓冲区就是利用类似流水线的思想,把本应当下一帧做的事情,在当前时刻进行并行处理实现对下一个帧的部分事务,让下一帧可以更加快速高效执行,这其实是一个非常非常好的设计思路。

-------------下次的来访是什么时候呢[doge]-------------