十五、SWM341系列之LVGL应用 15.1、LVGL 缓冲区的应用 现象:客户使用SWM34SRE时 ,客户不使用LVGL的前提下需要手动切换缓冲区,但是切换的时候显示不正常; 分析与解决:需要客户手动切换的时候VBPRELOAD寄存器置位1,如下图所示,即可正常切换。
15.2、LVGL之 LV_IMG_CACHE_DEF_SIZE应用 现象:客户反馈在使用LVGL结合JPEG硬解码刷图时,在图像切换的时候显示不完全,大致显示效果如图所示。 分析及解决:指引客户在lv_conf.h中将LV_IMG_CACHE_DEF_SIZE的宏置为0,该宏的主要作用是缓存图像,通过牺牲RAM来获取更快的速度,但是存在指针访问异常的问题,将其关闭后显示正常。
15.3、LVGL 离线转换工具应用 现象:客户中有科技,使用SWM34S,客户反馈直接用离线转换工具把图片转换成.c文件后,无法正常显示。 分析解决:由于客户的图片源格式有问题,得通过画图工具打开再另存,然后通过离线转换工具转换出来的.c文件,问题解决。
15.4、SPI方式驱动的应用 现象:SWM34SRET7应用 SPI屏刷屏慢,240*240在30fps没法提升帧率的原因,由于spi屏采用DMA方式 搬运 ,套用disp2_2,如下图所示,disp2_2每缓存10*n行后传到缓冲区,间隔3.1ms后再进行下一次传输,每次传输间隔没法改除非提高系统主频, 分析与解决:在提高缓存行数到30行,并且LVGL_task_handler的更新更新周期提高至20ms(50fps),最终画面帧率可以到42fps。
15.5、lv_scr_load的应用 现象:客户反应改用lv_scr_load后,画面切换速度有明显改善。但是多次切换后速度会越来越卡。所以只能用回调用lv_scr_load_anim这个API,根据现场演示的效果,以及根据客户的代码查看,发现只有调用lv_scr_load_anim的地方执行慢了。 分析与解决:反复调用lv_scr_load卡顿的原因就是因为每次加载界面都需要重复申请控件导致内存溢出。 由于lv_scr_load_anim可以删除上一个界面,而且客户不需要动画效果,所以只要lv_scr_load加上lv_obj_del就能达到同样的效果。
15.6、LVGL GPU的应用 现象:客户显示屏项目(SWM34SRET6),客户需要JPG解码动图刷新,但是客户多次移植都无法正确的把JPG解码的图片正常显示。 分析与解决:排查了SDRAM和Flash数据皆为正确后,通过修改lv_conf.h GPU的宏定义关闭即可。我们的例程都 是关闭的,但是客户的是之前NXP上位机生成的工程,默认没关GPU。
15.7、LVGL 之 disp_drv.full_refresh应用 现象: 客户反映触摸后会花屏,经过debug排查发现是客户移植的LVGL8.3.7的 双缓存机制有问题。一旦交互会有花屏,之前客户用DMA2D测试一直不出现问题。 分析与解决:客户移植时候disp_drv.full_refresh=1该句被注释导致,界面刷新导致的花屏,取消注释即可。
15.8、LVGL 之 roller控件点击事件 现象:东陆科技,用的滚轮控件,需求是滚轮其他区域无法触发点击事件,只能滑动,选中区域要能触发点击和滑动事件; 分析解决:把LVGL的roller底层屏蔽点击事件,再划出指定的区域可以触发点击事件
15.9、LVGL之 标签滚动显示 现象:客户摩托车仪表需要添加标签滚动显示,但是客户设置LV_LABEL_LONG_SROLL_CIRC 滚动后没有反应, 分析与解决:经过排查发现LVGL7.11 如果关闭了LV_USE_ANIMATION的宏定义,会直接卡住不动,所以需要打开该宏定义。
15.10、LVGL显示与供电稳定性的现象 现象:客户反应程序执行过程中会卡顿和死机,并且画面显示nodata. 分析与解决:经过长时间运行和debug,发现显示nodata的程序执行正常,并且现象只要和供电有关,于是检查供电。发现VDD(+3.3V节点)这一路电压,会有很大的波动,会有200mv~700mv的电压骤降,导致SDRAM执行不正常。
同类现象: 现 象:技术支持过程中,cap电容有很大纹波,会显示nodata白屏。 分析与解决:通过降频到120Mhz后,程序运行正常,应该是cap处纹波太大,导致系统运行不正常,需要客户改硬件。
15.11、341使用DMA-lvgl适配SPI屏幕ST7789-240x240 问题:客户 根据综合例程代码移植disp,优化等级是Ofast,但显示如下,优化等级改成O0,显示正常,但效率低。 分析和解决:目前根据刘工提供的例程,使用两通道DMA和来回切换spi数据宽度。DMA一个通道是传输像素点到SPI-data,另一个通道是spi-data到变量,在spi-data到变量DMA传输完成中断中flush-ready()。这样可以防止FIFO数据不发送,防止数据丢失。
15.12、LVGL与编译器优化的情况 现象:客户零六光电(SWM34SVET6)使用NXP GUI Guider结合LVGL7.11布局界面,但是客户反馈在O0编译等级下程序运行符合预期,但是运行效率不高,具体表现为使用屏上按钮切换页面时反应缓慢,卡顿明显;但如果使用O1及以上的优化等级时程序运行不符合预期,具体表现为程序开始时串口接收异常,无法跳出接收的循环。 分析:在查阅客户源码后,将其相关的标志位等变量加上volatile关键字,但是运行依然异常;在串口接收的while(1)中插入__NOP;指令后,运行结果符合预期,且运行效率大大提高,至此问题定位为编译器编译器认为是无副作用(no side-effect)的代码将其优化,需插入NOP指令防止该段代码被编译器优化掉。 |