最近我自己在做一个虚拟仪表项目时,遇到一个需要使用虚拟指针,而且该指针不是绘制的那种,是仿真的指针。项目要求指针旋转要快而且要流畅,一开始我直接在屏上绘制旋转的指针,发现指针动起来后撕裂的厉害(旋转可达到190多帧,但屏幕刷新率只有60Hz,因此把每一帧都在屏上绘制时会有撕裂)。这时我想到了emwin的多缓冲技术,想借鉴一下,但又不是很清楚emwin是怎么实现多重缓冲的,会不会降低我刷屏速度或增加CPU性能消耗,我对emwin的实现机理做了如下猜测:1、每次固定在一个缓冲区进行绘制,绘制结束后在帧同步时把缓冲区所有数据直接拷贝到显示缓冲区。这样只需要2个缓冲区。但耗费了拷贝时间,因此刷屏速度肯定变慢。
2、每次在一个非显示缓冲区进行绘制,绘制结束后在帧同步时把绘制好的显示缓冲区设置为显示缓冲区,这样省去了拷贝时间,但有以下几个问题:
-1)要是我的MCU不支持切换显存怎么办,比如直接就是8080接口TFT,最终显示缓存就是TFT自己,那是不是就不能用缓冲技术,或者只能用方法1,这样多重缓冲必然增加MCU消耗,而且压根没必要三缓冲。
-2)退一步讲,MCU支持切换显存,但这些显存内容如何保持同步,难道每次切换一个显存都是在新的显存中重绘所有东西吗?这样岂不是增加了MCU运行时间?
-3)emwin貌似没有哪是配置是否支持显存切换的,那么为了兼容性极有可能是使用方法1呀,不然如何适配各种显示设备?毕竟不是所有MCU都支持显存切换。
希望有GUI底层设计经验的大神指点迷津,其实我就是想知道一点,使用缓冲技术后,emwin的刷屏速度是不是会明显降低,因为按我的想法看的话,是肯定会降低的,而且应该降低不少才对,增加了MCU额外开销,这也是我一直不敢用emwin的主要原因。 |