正文
大家好,我是bug菌~
最近有个项目需要用到触摸交互,所以准备选一款GUI开源库,对于一名还停留在ucGUI界面开发时代的嵌入式工作者,这段时间的对几个流行的GUI的熟悉和使用,感觉大同小异,今天先总结分享下LVGL。
LVGL全名为Light and Versatile Graphics Library,直译为轻量级通用的图形库。
有些朋友就该问了LVGL不是叫LittleVGL,难道我们说的不是同一个LVGL?
其实LVGL早期是叫LittleVGL,是由来自布达佩斯(匈牙利)的 Gábor Kiss-Vámosi ,在2016年将其发布在 GitHub 上。
所以这个项目最开始是由一个人发起的,后来随着贡献人数越来越多,逐渐壮大,统一改名为了今天的Light and Versatile Graphics Library,github仓库地址也进行了更换,本质上两者是同一个东西。
LVGL是一款开源免费的嵌入式图形库,遵循比较宽松的MIT license开源协议,意味着你可以用于商业目的,对其修改无需公开,可以用在MCU、MPU以及各种显示器上。
github仓库:
https://github.com/lvgl/lvgl
主要的一些特点:
1、用纯C语言编写,基本上没有外部依赖。
2、可以裸机运行,也可以运行在RTOS、操作系统等,支持的平台挺多的,毕竟没什么依赖,做一层适配即可。
3、轻量级只需要 32kB RAM 和 128 kB 闪存、一个帧缓冲区和至少一个 1/10 屏幕大小的缓冲区即可进行渲染。
4、组件和应用方面都相对成熟,该有的都有。
如上是github仓库的主要项目,源码及适配接口项目,主要的有visual studio模拟器 、stm32、micropython等。
对于lvgl目前的应用还是比较丰富的,在国内网络上教程资料也相对比较多,官方文档相对较全,入门会比较轻松。
目前主流的嵌入式GUI都有比较成熟的PC仿真图形工具,这样可以大大加快界面的设计与布局,但是lvgl并没有给出免费的PC端GUI生成工具,官方的SquareLine Studio需要付费才能全面使用,否则只能用到部分控件。
有意思的是恩智浦为LVGL开发了一个上位机GUI设计工具--GUI Guider,可以通过拖放控件的图形化设计方式开发LVGL GUI界面,并且在PC端仿真生成代码移植到你的嵌入式设备上运行。
试用了一下还不错,界面和demo也倒美观,不过就是GUI Builder的更新速度跟不上LVGL的版本,目前lvgl到了V9而NXP仅支持到V8,对大部分应用影响倒不是很大,但总得从NXP这边做好了以后倒一手移植到其他平台使用,对于强迫症来说总会感觉奇怪。
前面bug菌也谈到,其实对于大部分嵌入式GUI都大同小异,很多使用方式跟在桌面应用开发中像QT,win32中也是经常接触的,所以看lvgl这样的嵌入式GUI在设计上基本也离不开如下几个设计理念:
1、模块化,这是裁剪的基础,也是实现小型轻量的一个手段,不同的功能组件独立存在,资源受限就删掉部分功能。
2、对象化设计,面向对象的设计方法是目前主流的软件设计方式,主流的几大桌面UI开发也都是采用面向对象的方式来开发。
3、事件驱动,采用事件驱动的机制来处理用户输入和系统事件。当用户触发某个操作时,LVGL 会生成相应的事件,并调用注册的事件处理函数来处理该事件,从而实现用户与界面的交互,这块有了解微软windows桌面的朋友应该很熟了。
4、硬件抽象层,为了快速适配不同的硬件平台,都会把硬件驱动接口进行抽象供开发人员移植使用。
5、采用双缓冲技术,一个用于显示,另一个用于绘制,从而实现了平滑的界面更新,避免了闪烁和撕裂现象。
6、可选的内存管理机制,对于嵌入式内存通常是受限的,通常这些库会提供多种内存分配策略来供开发者使用。
所以整体其实真正了解了一款GUI,其他的基本能够快速的学习和使用,这或许就是学习和技术提升的大道吧~
最后
好了,今天就跟大家分享这么多了,如果你觉得有所收获,一定记得点个赞~
bug菌唯一、永久、免费分享嵌入式技术知识平台~
推荐专辑 点击蓝色字体即可跳转
☞ MCU进阶专辑
☞ “bug说”专辑
☞ 专辑|手撕C语言
☞ 专辑|经验分享