聊聊嵌入式开源GUI-LVGL

7b00b2dd07fe24d626fbc7020e314021.gif

正文


大家好,我是bug菌~

最近有个项目需要用到触摸交互,所以准备选一款GUI开源库,对于一名还停留在ucGUI界面开发时代的嵌入式工作者,这段时间的对几个流行的GUI的熟悉和使用,感觉大同小异,今天先总结分享下LVGL。

LVGL全名为Light and Versatile Graphics Library,直译为轻量级通用的图形库。

有些朋友就该问了LVGL不是叫LittleVGL,难道我们说的不是同一个LVGL?

其实LVGL早期是叫LittleVGL,是由来自布达佩斯(匈牙利)的 Gábor Kiss-Vámosi ,在2016年将其发布在 GitHub 上。

d18dc28e58380971d65e2f69c704dc58.png

所以这个项目最开始是由一个人发起的,后来随着贡献人数越来越多,逐渐壮大,统一改名为了今天的Light and Versatile Graphics Library,github仓库地址也进行了更换,本质上两者是同一个东西。

LVGL是一款开源免费的嵌入式图形库,遵循比较宽松的MIT license开源协议,意味着你可以用于商业目的,对其修改无需公开,可以用在MCU、MPU以及各种显示器上。

github仓库:

https://github.com/lvgl/lvgl

b13ef27ab9ca4b13f9296d3daa57aff6.png

22d143cd44b134bcfe31ff4d51a6c01c.png

主要的一些特点:

1、用纯C语言编写,基本上没有外部依赖。

2、可以裸机运行,也可以运行在RTOS、操作系统等,支持的平台挺多的,毕竟没什么依赖,做一层适配即可。

6c41e963740f6c18ed2cff2718234b5a.png

3、轻量级只需要 32kB RAM 和 128 kB 闪存、一个帧缓冲区和至少一个 1/10 屏幕大小的缓冲区即可进行渲染。

4、组件和应用方面都相对成熟,该有的都有。

d30985c32487233e67411a04e671ef87.png

如上是github仓库的主要项目,源码及适配接口项目,主要的有visual studio模拟器 、stm32、micropython等。

对于lvgl目前的应用还是比较丰富的,在国内网络上教程资料也相对比较多,官方文档相对较全,入门会比较轻松。

0923283d2ac5ac4735555ba98bf88b78.png

目前主流的嵌入式GUI都有比较成熟的PC仿真图形工具,这样可以大大加快界面的设计与布局,但是lvgl并没有给出免费的PC端GUI生成工具,官方的SquareLine Studio需要付费才能全面使用,否则只能用到部分控件。

bf05b004d998477f69ecfb584179720a.png

有意思的是恩智浦为LVGL开发了一个上位机GUI设计工具--GUI Guider,可以通过拖放控件的图形化设计方式开发LVGL GUI界面,并且在PC端仿真生成代码移植到你的嵌入式设备上运行。

a8bb5b4dbd1ec0b2b5d11cefbd676cb2.png

试用了一下还不错,界面和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进阶专辑 85b4f4f07139ce7510d6bf2c197efa7b.gif

☞  嵌入式C语言进阶专辑 124ab98a2cbaf4967d634198ace62845.gif

☞  “bug说”专辑 27fcddfcb7a2e36ab482beb1a55f34ca.gif

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

☞ 专辑|学点网络知识

☞ 专辑|手撕C语言

☞ 专辑|手撕C++语言

☞ 专辑|经验分享

☞ 专辑|电能控制技术

☞ 专辑 | 从单片机到Linux

39ec295b147b26f7a814105cf33fe20a.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最后一个bug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值