LVGL 您所在的位置:网站首页 lv手表怎么使用 LVGL

LVGL

2023-12-25 05:34| 来源: 网络整理| 查看: 265

        之前我们了解了LVGL的基础数据类型,而且提到了最重要的链表,LVGL主逻辑事务均是基于全局链表的数据处理。

        LVGL中大量应用了宏定义,例如上述的全局链表。主要包含定时器(V7中叫task,再之前的版本没有看过)、显示器、输入器、文件系统、动画、组、图像解码器、样式、布局描述、图像缓冲、主题、字体等等吧。

全局链表定义宏

        比如定时器链表_lv_timer_ll。这是一个变量定义,虽然你可能第一眼没看到它。使用宏LV_DISPATCH来定义。

        例如LV_DISPATCH(f, lv_ll_t, _lv_timer_ll)就是f(lv_ll_t, _lv_timer_ll)。

        全局链表定义是LV_ROOTS。

        也就是LV_ITERATE_ROOTS(LV_DEFINE_ROOT),也就是LV_DISPATCH(LV_DEFINE_ROOT, lv_ll_t, _lv_timer_ll)...,也就是LV_DEFINE_ROOT(lv_ll_t, _lv_timer_ll)...,也就是lv_ll_t _lv_timer_ll;...

        最终就得到了lv_ll_t定义的链表变量_lv_timer_ll、_lv_disp_ll等等。这些变量将用于全局事务的计算。

        LVGL的交互部分主要是lvgl内核初始化、用户输出(屏幕)输入(触屏等,可选)接口注册、毫秒时基获取和主逻辑事务处理。

        1,内核初始化:通过调用lv_init函数实现。2,用户输出输入接口注册:通过定义静态显示、输入设备结构体变量及显示缓冲注册到内核。3,毫秒时基获取:返回系统时钟毫秒数即可。4:主逻辑事务处理:通过函数lv_task_handler实现。

        任意工程实现以上接口,再加上硬件无关的UI代码就可完整的运行lvgl了。当然了,你要保证留足必要的内存给lvgl。

        按照从易到难的原则,最简的无外乎是毫秒时基获取部分,只需要定时通知lvgl即可,例如每1毫秒调用lv_tick_inc(1)或者是每5毫秒调用lv_tick_inc(5),总之通知给lvgl时间的变化量即可,这样lvgl通过累计就知道系统时间了。除此外还支持millis()直接获取时间。可以看出lvgl的包容性非常强,几乎每一种接口都尽可能支持多种方式。

        有了时间,和时间相关的功能就可以正常运作起来了,例如帧率计算、动画调度、超时机制等等。

        接着是绘制、输入接口注册部分。绘制部分除了常规UI库都有的的绘制接口外,还需要额外可选的屏刷缓存区,好处是避免一次性的整屏缓存申请,从而降低了整体的缓存需求,而又不是直接调用绘制接口又可以进一步避免重复高频调用绘制接口而降低刷新效率,例如画点也需要调一次开窗和打点,那么绘制波形无外乎会卡得一批。所以你可以了解到,lvgl不是一个一个点画出来的UI,因此你不能通过单步调试观察UI的绘制过程。因为多数时候是操作缓存,而缓存要刷到哪里也不固定。如果出问题那么多数情况也可能是你的使用方法不当。

        此外绘制接口还有众多的功能,例如软件屏幕旋转支持等等,如果你使用的屏幕和lvgl支持的屏幕一致,你还可以直接使用lv_drivers中的屏幕驱动程序。屏幕支持MCU屏幕、RGB屏幕、fbdev、SDL等等,因此还可以使用硬件绘制加速,例如DMA2D、PXP GPU等等,都可以在其配置文件中打开支持。除此外绘制接口还需要赋值屏幕尺寸参数等等,这比V7版本固定的宏定义尺寸要灵活一些。例如检测屏幕ID使UI适配不同屏幕尺寸。

        输入接口就更为灵活了,支持触屏、鼠标类的点回馈设备以及键盘、编码器、甚至是按键。更甚至你还可以使用陀螺仪、声波、脑电波等等转化过去为任意一种类型来控制。有一次体现了LVGL的兼容性非常强大。

        再接着是LVGL的内核初始化,一个lv_init函数完成,主要对上述的全局链表进行初始化,分配相应的内存,目标平台大小端检测,初始化样式、字体、文件系统、解码器等等,让内核可以正常的运行起来。最后标记已经初始化,防止重入。

        最后的部分是事务处理,也是一个函数lv_task_handler完成,其实也就是调用lv_timer_handler函数,目的是兼容之前的命名。这部分就是分析lvgl逻辑的主要途径。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有