懒人资源论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1301|回复: 1

GUI的绘图效率优化总结

[复制链接]

37

主题

37

帖子

403

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
403
发表于 2020-7-21 18:17:10 | 显示全部楼层 |阅读模式
一:我们先研究下GUI库的外围


影响绘图效率的因数有:
1:屏幕分辨率(和屏幕的物理尺寸无关)
2:屏幕接口的带宽
3:CPU速度
4:内存速度

1:屏幕分辨率
通过分辨率我们可以算出理论帧率(每秒的全屏绘图次数):
假设屏幕的分辨率为 320*480  颜色为16位色 两个字节一个颜色  接口速度为10Mbyte/S
屏幕的像素数量为:320*480=153600
全屏绘图一次的数据量为:153600*2 byte=307200 byte
10Mbyte= 10485760 byte
那 理论上每秒可以全屏绘图 10485760 / 307200 = 34.13次。

2:屏幕接口的带宽
上面的计算假设了接口速度(带宽),如果接口速度越快,显然帧率可以提高


以上理论计算建立在理想环境  没有协议开销,全速LCD绘图,实际上 某些接口的屏幕有协议开销,比如发送绘图的坐标。CPU也不可能不做别的事情,只绘图,UI库也是需要CPU参与运行的。等等

3:CPU速度
CPU不可能100%的时间都花在刷屏上。CPU先要运行GUI库 得到绘图的内容 然后将内容刷到屏幕上。
刷屏所需的时间已被上述内容限定(带宽 分辨率 限定了一帧的绘制时间)加上CPU运行一次GUI的LOOP所需的时间,大致的得到一帧的总用时,一帧的用时的倒数为实际的帧率

4:内存速度
CPU的运行需要内存,如果内存速度不够快,CPU的执行就要等待内存的读写,造成CPU运行效率的降低



二:分析优化方向

先总结第一部分的内容
单片机在绘制一帧LCD的过程中,先要运行GUI库 将图形绘制到缓存,再将缓存搬运到 lcd

所以可以优化的地方有:
1:提高接口的速度(如果有可能的话)。以减少刷屏时间
2:提高GUI库的效率。(可以更换更高效的GUI库)。以减少GUI库的运行时间
3:使用更高速度的内存。

1:提高接口的速度
例如STM32系列的FSMC接口,可以控制时序的各种delay。
QQ截图20200721181600.jpg


2:提高GUI库的效率
首先要找效率较高的GUI,测试,将各种GUI库移植后看效率如何。当然要权衡GUI库的功能。
下面的内存分析基于 littlevgl 这个GUI的缓存原理分析,其它GUI可能原理不一样。
通常 GUI库会要求给一个或两个缓存给屏幕缓存用  GUI绘图到缓存然后搬到LCD。。问题在于缓存的大小。
因为单片机的内部ram普遍较小,不可能做全屏缓存,所以只能用小缓存  局部 多次的刷,以完成一屏的刷新。
如果缓存足够大,GUI将一整屏的图形画到缓存,一次将全屏搬到LCD,绘图逻辑只执行一次。
如果缓存太小,绘图逻辑将会多次执行,完成一整屏的绘制  相当于降低了GUI库的效率。
单片机内部内存小   牺牲一部分GUI效率来减小缓存的占用。即便如此,也比使用外部RAM做屏幕缓存来的快。(STM32F429 外部SDRAM FSMC驱动LCD)
如果单片机内部内存够大可以考虑使用DMA+双缓的方式,缓存搬运到LCD使用DMA,CPU同时运行GUI库绘制另一个缓存,因为搬运到屏幕和运行GUI库是并行的,所以可以提高效率。


所以要提高GUI库的效率,除了要选效率较高的库之外  还要合理配置其缓存


3:使用更高速度的内存
在STM32系列 内部的ram比外部ram速度要快得多,所以一定要把屏幕缓存放内部ram。运行GUI库的任务栈也要放内部ram(木桶效应,任务栈所在的内存速度慢,那写屏幕缓存的速度也会变慢)
业务逻辑因为对速度不敏感  可以使用外部ram,内部ram还是让给GUI库使用吧




三:定位效率低的根源
如果你已经使用了一个效率比较高的GUI库,速度也不慢的单片机   刷屏还是卡顿,那需要找出谁是木桶的短板。
很多QQ群求助者 其刷图效率低的原因是因为绘图函数有问题

比如每画一个点都要发一次坐标,在FSMC驱动的LCD来说,发送坐标的代价是挺高的。但是LCD的x坐标其实是可以自增的。也就是说绘制lcd 的一行,只需要发送一次起始坐标即可 后面的可以连续发送颜色数据。



回复

使用道具 举报

4

主题

4

帖子

177

积分

版主

Rank: 7Rank: 7Rank: 7

积分
177
发表于 2020-7-21 18:20:48 | 显示全部楼层
使用STM32的DMA2D加速,配合GUI的刷位图方式,效率还是不错的。即使是SPI屏也可以使用DMA,但是会消耗内存。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|懒人资源论坛

GMT+8, 2021-9-22 16:13 , Processed in 0.075727 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表