1.简介
最近在学习RTOS
,发现国产RTOS
竟然已经发展得这么蓬勃了,之前一直喜欢用freertos
,但现在更多得国产物联网操作系统更让我值得期待和尝试了。此次,主要是体验下中国移动旗下得一块轻量级RTOS
,通过配置组件,使能GUI模块,顺便跑了下demo
,发现惊喜连连,棒棒哒!
OneOS
是中国移动针对物联网领域推出的轻量级操作系统,具有可裁剪、跨平台、低功耗、高安全等特点,支持ARM Cortex-M/R/A
、MIPS
、RISC-V
等主流CPU架构,兼容POSIX
、CMSIS
等标准接口,支持Micropython
语言开发,提供图形化开发工具,能够有效提高开发效率并降低开发成本,帮助客户开发稳定可靠、安全易用的物联网应用。
轻量级GUI框架是基于LVGL8.2
,是一个C语言编写的免费的开源图形库,提供了用于嵌入式GUI的各种元素。用户可以利用丰富的图形库资源,在消耗低内存的情况下构建视觉效果丰富多彩的GUI。
Benchmark
是LVGL性能测试的测试用例。其在矩形、边框、阴影、文本、图像混合、图像变换、混合模式等各种情况下进行性能测试。测试期间对象的大小和位置使用伪随机数设置,以使得性能测试可重复。
2.测试步骤
使用menuconfig
配置Benchmark
性能测试用例,并使用keil或者gcc编译,并烧写程序到stm32f469-st-disco
板子上去。
文章图片
重启开发板,此时,性能测试将会运行,屏幕顶部显示当前测试步骤的标题和上一步骤的结果。
文章图片
测试结束后,将创建一个表格来显示测量的FPS值。
3.测试原理
FPS的代码测量原理如下:
- 构造
scene_dsc_t
结构体,并在其中保存各种场景下的帧率测试所需数据,包含:场景名、用于场景测试的回调函数、消耗渲染时间、刷新次数,以及权重。其中测试场景48个,叠加显示不透明度与完全不透明度方式,则测试总场景96个。 - 在显示驱动的回调函数
monitor_cb
中,实现每一个测试场景的累积渲染时间和帧数。获取到此数据后,便可得到每秒钟帧数,即FPS=帧数/累积渲染时间。 - 在
lv_demo_benchmark
帧率测试入口函数中,调用scene_next_task_cb
函数,并在其中调用每一个scene_dsc_t
结构体中的场景测试回调函数,对每一个场景进行测试。 - 测试完每一个场景,即可得到每一个场景对应的帧率FPS,通过加权平均的方式,获取到平均帧率。
文章图片
测试范围包括:
- 矩形:普通矩形、圆角矩形、圆形
- 边框:普通边框、圆角边框、圆形边框、上边框、左边框、左上边框、左右边框、上下边框
- 阴影:小阴影、小阴影偏移、大阴影、大阴影偏移
- 图形:
RGB
图形、ARGB
图形、chorma keyed
图形、indexed
图形、alpha only
图形、RGB
图形着色、ARGB
图形着色、chorma keyed
图形着色、indexed
图形着色、RGB
图形旋转、RGB
图形平滑旋转、ARGB
图形旋转、ARGB
图形平滑旋转、RGB
图形缩放、RGB
图形平滑缩放、ARGB
图形缩放、ARGB
图形平滑缩放 - 文本:小型文本、中等文本、大型文本、压缩的小型文本、压缩的中等文本、压缩的大型文本
- 线条
- 弧形:普通弧线、粗弧线
- 混合模式:混合模式下的矩形、混合模式下的边框、混合模式下的阴影、混合模式下的图形、混合模式下的线条、混合模式下的弧线、混合模式下的文本
LV_DISP_REFR_PERIOD
,它告诉LVGL刷新屏幕的频率。换句话说,测试显示了纯渲染时间的FPS,而不受该宏的限制。4.结果分析
本轻量级GUI帧率测试使用LVGL官方
benchmark
,硬件选择stm32f469-st-disco
,Coretex-M4
核心。最终经过测试,得到平均帧率约为80FPS
。Opa.speed
部分,显示不透明度与完全不透明度相比的测量速度。【OneOS下的GUI框架测试】在表格的第一部分“缓慢但常见的情况”中,显示了被视为常见但速度低于
20 FPS
的情况。下面的All cases
部分则显示了所有结果。