随着触摸屏和物联网技术的发展,各类电子产品呈现两个趋势:一是各类智能硬件从无屏到有屏,从黑白屏到高清彩屏,带电子屏的产品数量激增;二是人机界面更加酷炫流畅,交互功能趋向智能化。图形用户界面( GUI )快速推进了嵌入式产品的智能化,大幅提升了用户体验,降低了用户使用门槛,普惠更广泛的社会人群。
轻量化图形组件可以依托于 OneOS ,在各种各样带屏幕的 MCU 产品上大放光彩。比如:智能家居、工业控制、汽车表盘、医疗设备、穿戴设备等,可谓是大有可为!如果说 MCU 上的 CPU 核是灵魂,那么屏幕则是它美丽的容颜,让人一眼难忘。
本轻量化图形组件基于 LVGL 移植,目前支持版本: LVGL7.9 及 LVGL8.2 。支持之初,我们考量了市面上常用的开源图形框架,最终在 QT for MCU , LVGL ,以及 GUIX 三者中选择了 LVGL ,也和其 LVGL开源项目的发起者 Kiss-Vámosi 建立了友好的合作。而后,我们增加了 Arm-2D 用以支撑硬件加速,以及更小资源的图形显示。
目前为止,本轻量化图形界面GUI组件达到如下的设计目标及功能:
体验的第一步就是高效使用 menuconfig 对轻量级框架进行快速使用和配置。该章节对配置进行了较为详细的阐明。
(Top) → Components→ GUI
(lcd) GUI display dev name
(touch) GUI input dev name
[*] Enable LVGL --->
touch 和 lcd 是 GUI 的输入输出设备,选中 Enable LVGL 即可使能 LVGL ,目前支持的版本为 LVGL7.9 和 LVGL8.2 。
LVGL (Enable lvgl 8.2) --->
LVGL basic menu --->
Widget usage --->
Extra Widgets --->
Themes --->
Layouts --->
Text Settings --->
Font usage --->
LVGL FileSystem --->
LVGL Log --->
LVGL Asserts --->
Third party Lib --->
Extra --->
[ ] Enable LVGL examples ----
[*] Enable LVGL Demo --->
以上是适配支持的 LVGL 主要 menuconfig 配置。从上到下一一解释。
(120) LVGL buff lines
(20) LVGL display refresh period(ms)
(30) Input device read period(ms)
(10) GUI task priority
(4096) GUI task stack size
(5) GUI task msleep
[ ] Enable LVGL two buff
[ ] Enable CPU usage and FPS count Show
[ ] Show the used memory and the memory fragmentation
[ ] LVGL minimal configuration.
[*] Enable graphics acceleration
[*] Enable complex draw engine
帧率FPS是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数。FPS是 测量用于保存、显示动态视频的信息数量。每秒钟帧数越多,所显示的动作就会越流畅。通常,要避免动作不流畅的最低是10。对于帧率,我们主要关注以下几个方面:
LVGL本身是运行在OneOS之上的,因此,OneOS的配置会对帧率产生影响。硬件的支持也需要系统的管理。
Benchmark 是LVGL性能测试的测试用例。其在矩形、边框、阴影、文本、图像混合、图像变换、混合模式等各种情况下进行性能测试。测试期间对象的大小和位置使用伪随机数设置,以使得性能测试可重复。我们现在来运行它!
使用menuconfifig配置Benchmark性能测试用例,并使用keil或者gcc编译,并烧写程序到stm32f469-st-disco板子上去。
重启开发板,此时,性能测试将会运行,屏幕顶部显示当前测试步骤的标题和上一步骤的结果。
FPS的代码测量原理如下:
测试原理逻辑图如下:
最后,轻量化图形组件仍然在持续地迭代开发中,并计划加入更多的功能,目前已计划的有: