聊聊嵌入式开源GUI-LVGL

文摘   2024-05-11 12:12   广东  


正文


大家好,我是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进阶专辑 

☞  嵌入式C语言进阶专辑 

☞  “bug说”专辑 

☞ 专辑|Linux应用程序编程大全

☞ 专辑|学点网络知识

☞ 专辑|手撕C语言

☞ 专辑|手撕C++语言

☞ 专辑|经验分享

☞ 专辑|电能控制技术

☞ 专辑 | 从单片机到Linux

最后一个bug
一个嵌入式技术进阶公众号,定期分享C语言,C++、MCU(如stm32等)、DSP、ARM、嵌入式Linux等“独门”软件设计技巧和知识归纳总结,同时分享应用程序设计、物联网、滤波及控制算法推导和仿真设计等嵌入式硬核知识技巧!欢迎大家关注!
 最新文章