有时候我们需要将FreeRTOS和LVGL页面切换为LCD纯手动绘制,提供更高的灵活性和可定制性。
-
自定义界面设计:使用LCD纯手动绘制界面,可以完全自定义界面的外观和行为。可以根据特定的需求和设计概念创建独特的用户界面,而不受LVGL框架的限制。
-
资源优化:LVGL是一个功能强大的图形库,它提供了丰富的控件和功能,但同时也需要占用一定的系统资源。通过使用LCD纯手动绘制,可以根据具体应用的需求,灵活地控制和优化系统资源的使用,提高系统的效率和性能。
-
快速原型设计:对于某些项目,可能需要快速原型设计或临时界面,而不需要过多的界面交互和复杂的控件。使用LCD纯手动绘制可以快速实现简单的界面,加快开发进度。
-
跨平台兼容性:使用LCD纯手动绘制界面可以实现在不同平台和设备上的交叉兼容性。由于LVGL是基于C语言编写的,通过手动绘制界面可以将应用程序移植到其他平台上,而无需太多的修改和调整。
在一开始我们尝试了将LVGL界面的更新任务删除,删除的同时创建一个LCD手动绘制任务,然后试图从LCD切换至LVGL界面的时候,删除LCD手动绘制任务,重新创建LVGL任务。很幸运,LCD任务正常地跑起来了,能够正确地显示和更新,但是尝试返回却失败了。
后来尝试了创建一个LVGL的screen,就是什么内容都没有的,按按键就返回。测试结果表明,在无LCD任务创建的情况下可以正常返回,但是当加入手动绘制的LCD任务创建删除之后,返回可能是卡死在LCD初始化清屏,可能是在操作lcd任务一两步之后就卡死。由于LVGL较大,下载烧录要花上三四分钟,在经过多次调试之后,我观察发现多数情况下,OLED任务并没有卡死,虽然此时LVGL已经是异常了。说明问题应该是出现在LVGL的语法逻辑这些内容上,应该是不属于硬件卡死。结合LCD触摸无反应,我觉得可能是LVGL抢占了。
我又尝试了不删除LVGL,也不创建LVGL screen的方式,也就是尝试挂起LVGL任务。
具体流程为:用户进入需要LCD手动绘制的界面,暂停LVGL定时器,挂起LVGL任务,创建LCD手动绘制任务,结束时删除LCD手动绘制任务,恢复LVGL任