tiky 发表于 2020-9-17 21:31:12

上传两个两大体系GUI程序,emWin与littleVGL的巅峰对决

本帖最后由 tiky 于 2020-9-17 22:01 编辑

      emWin是老牌的GUI图片形界面公司,一路走过来十几年了,很接地气;代码中透露出一些年代久远,扣扣省省,没什么FLASH,没什么RAM的画风;所以即使在小单片机中,emWin运行速度是相对快的,优化到入骨;

      littleVGL发明才几年,出身的年代就是什么安卓、苹果满天飞的年代,哪里还知道emWin走的艰苦日子,上来就给你噼哩啪啦开个大缓冲;什么叫单色填充?littleVGL表示 从来没听过这玩艺,单色在数学上只是彩色的极值。得到这个真传了以后,littleVGL的风格更是大胆向高端高性能上走,都是直接上三色混合、滑动界面,什么GPU,2D加速都是标配,所以界面很优美,代价也很惨重,一般的单片机玩不起。虽然littleVGL也可以在少资源的单片机中运行,不过用基础功能都够呛了。

       下面上传2组代码,方便大家对比。emWin界面用上了TKM32F499各种加速功能,包括但不限于直接内嵌电阻触摸(TouchPad内核中断直读)、浮点运算器FPU、TK80高级功能、DMA、TK499配合液晶屏实现的各种2D加速;所以emWin运行速度很相当快,240MHz可以从容应对;

      


       littleVGL的程序完整移植了两个版本,一个电阻触摸的,一个电容触摸的。基本上没什么优化能用上,TK80配合液晶屏能实现2D加速,但没接入函数,FPU没能用,TK80高级功能也用不上,就得个TouchPad用得上,不过电容触摸就不能用了,所以理论上电容触摸会慢一点,实现上好像看不出来;好不容易,发现可以用DMA+中断,不过最死的是,居然要等待DMA完了,才能进行下一步,那样用什么双缓冲,三缓冲还是四缓冲(RGB888的屏开三缓冲时相当于开发四缓冲,因为刷屏用的Buff不能在littleVGL下复用),都白开了,中断也用不上;最后被逼得没办法,直接用TK499,超频到300MHz,跟littleVGL在854*480的屏上硬干,才勉强可以用。如果实现littleVGL的高级功能,分辨率最好不要超过480*320才比较快,或者用高分辨率时,不要用滑动功能,静态界面切换快一些。看来下一版MCU要对littleVGL进行逆向优化才行,估计能快上至少几十倍。






tiky 发表于 2020-9-17 21:37:09

emWin是基于这个硬件,TK499+800*480的4.3寸屏(8080模式);https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-1175222619.25.3b472d19JMWmyk&id=611386824590
littleVGL是基于这个硬件TK499+854*480的5寸屏(8080模式):https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-1175222619.32.595e2d06KvUbt9&id=627289811817

astankvai 发表于 2020-9-17 21:44:04

之前用tangram的M4, littleVGL快得飞, 滑动功能非常好用。 可惜TG401的总线只有8位宽, 且高低字节不能交换, emWin要软件做交换,速度慢了不少。

PPS 发表于 2020-9-17 21:50:33

littlevGL这么差吗?

bangbangji 发表于 2020-9-17 21:53:47

那为嘛他还叫little?
{:lol:}

tiky 发表于 2020-9-17 21:58:32

PPS 发表于 2020-9-17 21:50
littlevGL这么差吗?

littlevGL不差,颜值爆表,只不过他的驱动方式有点高大上,需要GPU才效率高,下一版芯片看把这个GPU修理修理才行

astankvai 发表于 2020-9-17 22:08:53

tiky 发表于 2020-9-17 21:58
littlevGL不差,颜值爆表,只不过他的驱动方式有点高大上,需要GPU才效率高,下一版芯片看把这个GPU修理 ...

改LVGL的底层驱动适配应该也可以吧。

armok. 发表于 2020-9-17 22:29:13

精华,打赏!

tiky 发表于 2020-9-18 09:58:27

astankvai 发表于 2020-9-17 22:08
改LVGL的底层驱动适配应该也可以吧。

改底层不行,那个三原色混合需要逐点运算,万变不离其宗,他设计上就需要GPU才快的,没GPU快不了

642242855 发表于 2020-9-18 11:54:57

感觉499用LVGL算力还是不够,刷屏速度是可以了

281313005 发表于 2020-9-19 15:52:39

感谢楼主分享,有个项目正在使用LittleVGL,stmf429带7寸屏跑起来还可以

sokou 发表于 2020-9-19 20:10:55

LittleVGL我们现在用600MHz的芯片,没有GPU,分辨率高的也是刷新很慢

PPS 发表于 2020-9-19 21:11:51

sokou 发表于 2020-9-19 20:10
LittleVGL我们现在用600MHz的芯片,没有GPU,分辨率高的也是刷新很慢

分辨率高到多少?我还打算用来着,lvgl这么吃算力,有些提心吊胆了。

sokou 发表于 2020-9-19 23:09:27

PPS 发表于 2020-9-19 21:11
分辨率高到多少?我还打算用来着,lvgl这么吃算力,有些提心吊胆了。

分辨率是1200x800。

PPS 发表于 2020-9-19 23:16:42

sokou 发表于 2020-9-19 23:09
分辨率是1200x800。

那1024*768估计也悬了

PPS 发表于 2020-10-12 17:53:29

我看了一下你们的lvgl工程的移植,因为你们用的是双屏缓冲,所以disp_flush里面的参数color_p只需要更新到LCD驱动器的显示地址就行,而不需要传输所有数据。也就是说将LCD的显示缓存定位到color_p即可:

static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)
{
    LCD显示地址 = color_p;
    lv_disp_flush_ready(disp_drv);
}

紫丽眼 发表于 2020-12-3 13:31:28

RGB屏可会好点?

kenshin1314 发表于 2021-1-28 17:37:48

有没有结论,哪个更好?

AUDIO_TANXIAOLI 发表于 2021-6-16 17:26:55

也在搞GUI,顶一下

Grant 发表于 2021-6-20 18:04:03

刚用了LVGL在1.3寸屏上,效果不错,客户也承认了,马上开始小批量测试。正打算下一个项目上MIPI接口1024*768的屏,你这么说搞的我有压力啊。TouchGFX漂亮归漂亮,但不开放底层代码。之前一个客户遇到问题,ST深圳的FAE说他也没有底层代码,出问题搞不定只能反馈欧洲,小客户那得要猴年马月才能解决?就算自己找问题都没有路走。

ZHAOBAO511 发表于 2021-11-13 08:33:50

谢谢,学习学习.
页: [1]
查看完整版本: 上传两个两大体系GUI程序,emWin与littleVGL的巅峰对决