不积跬步无以至千里,不积小流无以成江海。此篇文章,主要对自己使用OneOS
下的一个图形组件,对于配置的一些感受,欢迎指正。
轻量级GUI
框架基于LVGL
移植开发,针对图形化开发工具的设计,以模块化的方式,解决物联网操作系统在微控制器下图形界面资源占用过大、源码不可见、图形界面库不统一、使用难度较大的痛点。
主要功能如下:
CSS
样式的完全可定制的图形元素bmp/png/jpg
图片格式TTF
矢量字库此份说明文档主要阐明如何高效使用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
配置。从上到下一一解释。
LVGL basic menu
是LVGL
最基本的配置,也是最重要的配置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
一些复杂的示例(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
LVGL
的单绘制缓冲区的行数LVGL
将在此期间重新绘制更改的区域GUI
任务的优先级设置GUI
任务的栈大小设置GUI
任务的默认睡眠时间LVGL
双绘制缓冲区CPU
使用率和FPS
计数显示LVGL
最小化配置,一般用于硬件资源很小的情况支持了很多控件,可以自己选择是否需要,默认全部选中
支持了很多高级控件,可以自己选择是否需要,默认全部选中
支持的主题,是对象的默认样式。创建对象时,将自动应用来自主题的样式。
[*] A layout similar to Flexbox in CSS.
[*] A layout similar to Grid in CSS
支持flex
弹性布局和grid
网格布局。
(X) UTF8
( ) ASCII
为字符串选择字符编码。IDE
或编辑器应具有相同的字符编码。
选择支持的字体。
-*- LVGL using filesystem
Select mount device (SD/TF Card) --->
通过此配置,关联组件中的文件系统。
( ) TRACE
( ) INFO
(X) WARNING
( ) ERROR
( ) USER LOG
( ) NO LOG
LVGL
的log
日志,支持以上6个级别,级别越高,打印信息更多。
[*] Check if the parameter is NULL. (fast)
[*] Checks if the memory is successfully allocated or no. (fast)
[ ] Check if the styles are properly initialized. (fast)
[ ] Check the integrity of `lv_mem` after critical operations. (Slow)
[ ] Check NULL, the object's type and existence. (Slow).
断言机制,分别在于:
NULL
lv_mem
的完整性NULL
,对象的类型和存在性[ ] Enable LVGL GIF
[ ] Enable LVGL PNG
[ ] Enable LVGL JPG
[ ] Enable LVGL BMP
[ ] Enable LVGL QRCODE
支持的第三方库
选中后,选择对应的示例,供开发者运行体验。
demo
选中后,编译运行后将直接运行该demo
。example
选中后,将会添加到shell
命令中去,需要开发者,自己在shell
中调用该命令,example
命令以ex_
开头。
使用LV_CONF_MINIMAL
作为LVGL
最小化配置时,需要注意首先取消使能LVGL
,然后保存配置后,再次使能LVGL,然后再选中LVGL minimal configuration
。
(lcd) GUI display dev name
(touch) GUI input dev name
[ ] Enable LVGL --->
Components → GUI→ Enable LVGL→ LVGL basic menu
(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.
在使用stm32f469-st-disco
来测试benchmark
测试帧率时,通过配置选中该demo
:
Components → GU→ Enable LVGL→ Enable LVGL Demo
(1) Enable LVGL demo benchmark
(0) Enable LVGL demo music
(0) Enable LVGL demo keypad and encoder
(0) Enable LVGL demo stress
(0) Enable LVGL demo widgets
需要注意的是:
(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
Enable graphics acceleration
,该MCU具有专门处理图形图像的硬件,比如 stm32 的 DMA2D。LVGL display refresh period
,刷新周期选择20ms
120
行,不选择双缓冲区,这是在有限条件下的折中Enable CPU usage and FPS count Show
、Show the used memory and the memory fragmentation
、LVGL minimal configuration
-O2