随着触摸屏和物联网技术的发展,各类电子产品呈现两个趋势:一是各类智能硬件从无屏到有屏,从黑 白屏到高清彩屏,带电子屏的产品数量激增;二是人机界面更加酷炫流畅,交互功能趋向智能化。图形 用户界面( 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 的代码测量原理如下:
测试原理逻辑图如下:
最后,轻量化图形组件仍然在持续地迭代开发中,并计划加入更多的功能,目前已计划的有:
一起走过的路,回首看,定满是繁花 🌷 。