当前位置: 首页 > article >正文

lvgl运行机制分析

  • lv_timer_handler() 是 LVGL 的“心脏”:这个函数会依次做以下事情:

    1. 处理定时器(如动画、延迟回调)。

    2. 读取输入设备(如触摸屏、按键的状态)。

    3. 刷新脏区域(仅重绘屏幕上发生变化的区域)。

    4. 执行用户注册的回调函数(如按钮点击事件)。

  • 开发者需要手动调用它:通常在一个 while(1) 循环或 FreeRTOS 任务中定期调用,例如每 5~50ms 调用一次。例如:

    c

    复制

    while (1) {lv_timer_handler();  // 驱动 LVGL 的核心逻辑vTaskDelay(5);       // FreeRTOS 中延时 5ms
    }
  • 如果没有调用 lv_timer_handler():LVGL 的定时器不会触发,输入设备状态不会被读取,UI 也不会更新,导致“死机”。


2. 为什么 LVGL 不依赖硬件中断?

  • 跨平台兼容性:LVGL 需要支持从低端单片机到 Linux 的各种平台,硬件中断机制差异较大,轮询更通用。

  • 可控性:轮询允许开发者自由控制 LVGL 的调用频率,避免中断抢占导致实时系统的不确定性(尤其是在 FreeRTOS 中)。

  • 资源效率:中断处理需要上下文切换,频繁的中断可能占用过多 CPU 资源,而轮询可以通过调整调用间隔平衡性能与功耗。


3. LVGL 如何与 FreeRTOS 协同工作?

  • 典型场景:在 FreeRTOS 中创建一个专用任务(如 lvgl_task),负责定期调用 lv_timer_handler()。例如:

    c

    复制

    void lvgl_task(void *pvParameters) {while (1) {lv_timer_handler();      // 驱动 LVGLvTaskDelay(pdMS_TO_TICKS(5)); // 5ms 周期}
    }
  • 输入设备的读取:触摸屏或按键的状态通常也需要通过轮询或中断获取,但 LVGL 不强制要求使用中断。例如:

    • 轮询方式:在 lv_timer_handler() 中调用 lv_indev_read()

    • 中断方式:在触摸屏中断中标记事件,然后在 lv_timer_handler() 中处理。

因为需要用到systicks作为lvgl时基函数的基本盘,所以你freertos配置systicks时最好为1ms也就是时间片长短哪里的配置综合结果要为每1ms systicks触发一次


4. LVGL 的优化:减少轮询开销

  • 脏区域机制(Dirty Area):LVGL 只会重绘屏幕上发生变化的区域,而不是全屏刷新,大幅降低 CPU 负载。

  • 事件驱动回调:用户可以为 UI 元素(如按钮)注册回调函数,仅在事件发生时触发逻辑,避免不必要的轮询计算。

  • 定时器精度控制:通过调整 lv_timer_handler() 的调用频率,平衡响应速度和 CPU 占用率。


5. 对比 FreeRTOS 的任务调度

  • FreeRTOS 的任务:基于优先级抢占,依赖调度器(如 PendSV 中断)切换任务。

  • LVGL 的轮询:依赖开发者主动调用 lv_timer_handler(),本质上是一个“协作式”任务。

  • 关键区别:LVGL 不直接依赖硬件中断,而是通过任务调度间接实现“伪实时性”。


6. 你的推测是否正确?

  • 正确部分

    • LVGL 确实依赖轮询(lv_timer_handler()),而非硬件中断。

    • 不调用 lv_timer_handler() 会导致 LVGL 无法工作。

  • 需要补充的细节

    • LVGL 的轮询是协作式的,需要开发者将 lv_timer_handler() 嵌入到主循环或任务中。

    • FreeRTOS 的任务调度和 LVGL 的轮询是互补的,前者管理多任务,后者管理 UI 逻辑。


7. 实际项目中的建议

  • 调用频率:根据 UI 复杂度调整 lv_timer_handler() 的调用间隔(通常 5~50ms)。

  • 任务优先级:在 FreeRTOS 中,为 LVGL 任务分配中低优先级,避免阻塞关键任务。

  • 输入设备优化:如果使用触摸屏,可以在硬件中断中标记触摸事件,然后在 lv_timer_handler() 中批量处理,减少响应延迟。

1. LVGL 的定时器机制

  • LVGL 内部有一个定时器系统,lv_timer_handler() 是这个系统的核心函数。它负责处理所有与时间相关的任务,比如动画、屏幕刷新、输入设备的状态检测等。

  •  lv_timer_handler() 函数必须定期调用,否则 LVGL 的定时器系统将无法正常工作,导致动画停止、输入设备无响应等问题。这是因为 LVGL 的定时器系统是基于轮询的,而不是基于中断的。

  • 在 FreeRTOS 中,你可以在一个任务中定期调用 lv_timer_handler(),比如每隔几毫秒调用一次。这个任务可以是一个低优先级的任务,确保它不会影响其他高优先级任务的执行。

2. LVGL 的输入设备处理

  • LVGL 通过 lv_indev_read() 函数来读取输入设备(如触摸屏、按键等)的状态。这个函数通常会在 lv_timer_handler() 中被调用。

  • “持续监测触摸屏有没有被按下”实际上是通过定期调用 lv_indev_read() 来实现的。LVGL 并不会像 FreeRTOS 的任务调度那样实时监测输入设备,而是通过轮询的方式来获取输入设备的状态。

  • 当 lv_timer_handler() 被调用时,它会检查输入设备的状态,并根据这些状态更新 UI。例如,如果检测到触摸屏被按下,LVGL 会更新相应的 UI 元素(如按钮的状态)。

3. LVGL 与 FreeRTOS 的协同工作

  • FreeRTOS 的任务调度是基于优先级的,高优先级的任务会抢占低优先级的任务。LVGL 的 lv_timer_handler() 通常在一个低优先级的任务中运行,确保它不会影响其他高优先级任务的执行。

  • 你提到的“类似 PendSV 的机制”在 LVGL 中并不存在。LVGL 的定时器系统和输入设备处理是基于轮询的,而不是基于中断的。PendSV 是 FreeRTOS 用于任务切换的中断,而 LVGL 的定时器系统是通过定期调用 lv_timer_handler() 来实现的。

4. LVGL 的 UI 更新机制

  • 当你添加 UI 部件(如按钮、标签等)时,LVGL 会将这些部件添加到显示列表中。lv_timer_handler() 会定期检查这些部件的状态,并根据需要更新显示。

  • 如果触摸屏被按下,LVGL 会检测到这个事件,并更新相应的 UI 部件(如改变按钮的颜色、触发回调函数等)。这些更新操作通常是在 lv_timer_handler() 中完成的。

5. 总结

  • LVGL 的运行机制是基于轮询的,而不是基于中断的。它通过定期调用 lv_timer_handler() 来处理定时器、输入设备和 UI 更新。

  • FreeRTOS 的任务调度机制与 LVGL 的定时器系统可以协同工作。你可以在 FreeRTOS 的一个任务中定期调用 lv_timer_handler(),确保 LVGL 的正常运行。

  • LVGL 并不会像 FreeRTOS 的任务调度那样实时监测输入设备,而是通过轮询的方式来获取输入设备的状态,并在 lv_timer_handler() 中处理这些状态。

相关文章:

lvgl运行机制分析

lv_timer_handler() 是 LVGL 的“心脏”:这个函数会依次做以下事情: 处理定时器(如动画、延迟回调)。 读取输入设备(如触摸屏、按键的状态)。 刷新脏区域(仅重绘屏幕上发生变化的区域&#xf…...

ffmpeg avformat_open_input的作用

1. avformat_open_input 的作用 avformat_open_input 是 FFmpeg 中用于打开输入文件或输入设备的函数。它的主要作用是初始化输入文件或设备的上下文(AVFormatContext),并准备好从输入源读取数据。 2. avformat_open_input 的功能 打开输入文…...

leaflet扩展插件esri-leaflet.js

esri-leaflet.js是一个开源的JavaScript库,它允许开发者在Leaflet地图上轻松地使用Esri的服务,如ArcGIS Online和ArcGIS Server的图层。以下是对esri-leaflet.js插件的详细介绍: 一、主要功能 esri-leaflet.js的主要功能是将Esri的地图服务…...

8 SpringBoot进阶(上):AOP(面向切面编程技术)、AOP案例之统一操作日志

文章目录 前言1. AOP基础1.1 AOP概述: 什么是AOP?1.2 AOP快速入门1.3 Spring AOP核心中的相关术语(面试)2. AOP进阶2.1 通知类型2.1.1 @Around:环绕通知,此注解标注的通知方法在目标方法前、后都被执行(通知的代码在业务方法之前和之后都有)2.1.2 @Before:前置通知,此…...

day01_Java基础

文章目录 day01_Java基础一、今日课程内容二、Java语言概述(了解)1、Java语言概述2、为什么要学习Java语言3、Java平台版本说明4、Java特点 三、Java环境搭建(操作)1、JDK和JRE的概述2、JDK的下载和安装3、IDEA的安装4、IDEA的启动…...

cursor 弹出在签出前,请清理仓库工作树 窗口

问题出现的背景:是因为我有两台电脑开发,提交后,另一个电脑的代码是旧的,这个时候我想拉取最新的代码,就会出现如下弹窗,因为这个代码暂存区有记录或者工作区有代码的修改,所以有冲突&#xff0…...

详解直方图均衡化

直方图均衡化(Histogram Equalization) 是图像处理中一种常用的对比度增强技术,通过调整图像的灰度分布,使得图像的直方图尽可能均匀分布,从而提高图像的对比度和细节表现。以下是直方图均衡化的原理详解: …...

MyBatis-Plus 自动填充功能

MyBatis-Plus(MP) 提供了一个非常强大的功能——自动填充功能。该功能可以在执行插入或更新操作时,自动为某些字段赋值,免去手动设置这些字段的麻烦。常见的应用场景包括 创建时间 和 更新时间 字段的自动填充,帮助开发…...

认知动力学视角下的生命优化系统:多模态机器学习框架的哲学重构

认知动力学视角下的生命优化系统:多模态机器学习框架的哲学重构 一、信息熵与生命系统的耗散结构 在热力学第二定律框架下,生命系统可视为负熵流的耗散结构: d S d i S d e S dS d_iS d_eS dSdi​Sde​S 其中 d i S d_iS di​S为内部熵…...

Kibana:Spotify Wrapped 第二部分:深入挖掘数据

作者:来自 Elastic Philipp Kahr 我们将比以往更深入地探究你的 Spotify 数据并探索你甚至不知道存在的联系。 在由 Iulia Feroli 撰写的本系列的第一部分中,我们讨论了如何获取 Spotify Wrapped 数据并在 Kibana 中对其进行可视化。在第 2 部分中&#…...

C++—类与对象(中)

目录 1、类的6个默认成员函数 2、构造函数 构造函数的特性 3、初始化列表 4、析构函数 概念 5、拷贝构造函数 6、运算符重载 7、赋值运算符重载 赋值运算符重载格式 8、前置和后置重载 9、const修饰的成员 10、取地址及const取地址重载 1、类的6个默认成员函数 一…...

MySQL 事务笔记

MySQL 事务笔记 目录 事务简介事务操作事务四大特性并发事务问题事务隔离级别总结 事务简介 事务(Transaction)是数据库操作的逻辑单元,由一组不可分割的SQL操作组成。主要用于保证: 多个操作的原子性(要么全部成功…...

红黑树和 STL —— set和map 【复习笔记】

1. 二叉搜索树 1.1 二叉搜索树的概念 相比较前文的堆,二叉搜索树并不需要必须是一棵完全二叉树 二叉搜索树(二叉排序树或二叉查找树,简称BST)是具有以下特性的二叉树: 1. 若它的左子树非空,则左子树上所…...

网络空间安全(7)攻防环境搭建

一、搭建前的准备 硬件资源:至少需要两台计算机,一台作为攻击机,用于执行攻击操作;另一台作为靶机,作为被攻击的目标。 软件资源: 操作系统:如Windows、Linux等,用于安装在攻击机和…...

HarmonyOS学习第11天:布局秘籍RelativeLayout进阶之路

布局基础:RelativeLayout 初印象 在 HarmonyOS 的界面开发中,布局是构建用户界面的关键环节,它决定了各个组件在屏幕上的位置和排列方式。而 RelativeLayout(相对布局)则是其中一种功能强大且灵活的布局方式&#xff0…...

【2025年2月28日稳定版】小米路由器4C刷机Immortalwrt 23.05.4系统搭载mentohust 0.3.1插件全记录

小米路由器4C刷机Immortalwrt系统搭载mentohust插件全记录 首先将路由器按住后面的reset,用一个针插进去然后等待5s左右,松开,即可重置路由器。 然后要用物理网线物理连接路由器Lan口和电脑,并将路由器WAN口连接至网口。确保电脑…...

【SpringBoot+Vue】博客项目开发二:用户登录注册模块

后端用户模块开发 制定参数交互约束 当前,我们使用MybatisX工具快速生成的代码中,包含了一个实体类,这个类中包含我们数据表中的所有字段。 但因为有些字段,是不应该返回到前端的,比如用户密码,或者前端传…...

idea + Docker + 阿里镜像服务打包部署

一、下载docker desktop软件 官网下载docker desktop,需要结合wsl使用 启动成功的画面(如果不是这个画面例如一直处理start或者是stop需要重新启动,不行就重启电脑) 打包成功的镜像在这里,如果频繁打包会导致磁盘空间被占满,需…...

从入门到精通:Linux 权限管理(rwx/chmod/chown)

目录 1. 引言:为什么需要文件权限? 2. 基础概念:理解 rwx 权限 (1)权限的三种角色 (2)权限的三种类型 (3)权限的两种表示法 (4) 目录的 rwx…...

虚拟机如何设置ip

在虚拟机中设置IP地址的具体步骤会因虚拟机软件(如VMware、VirtualBox等)和操作系统(如Windows、Linux等)的不同而有所差异。以下是几种常见虚拟机软件和操作系统的IP设置方法。 --- 一、VMware中的IP设置 1.Windows虚拟机 1. 打…...

自然语言处理:稀疏向量表示

介绍 大家好,我是博主。今天又来和大家分享自然语言处理领域的知识了。原本我计划这次分享NLP中文本表示的相关内容,不过在整理分享计划的过程中,发现这部分知识里包含一些涉及复杂数学原理和抽象概念的内容。对于刚接触NLP的小伙伴们来说&a…...

ubuntu 20.04 安装labelmg

1. 下载安装包 下载链接:下载链接 2. 安装启动 # 创建labelImg的环境 conda create -n labelImg# 激活labelImg环境 source activate labelImg安装依赖 pip install pyqt5-dev-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/cd requirements/pip install -…...

Redis版本的EOL策略与升级路径(刷到别划走)

各位看官,刷到就点进来,大数据已经抓到你喽~😊 前言 在软件行业做服务端开发的我们,多多少少都会接触到Redis,用它来缓存数据、实现分布式锁等,相关八股文烂熟于心,但是往往会忽略具…...

ExpMoveFreeHandles函数分析和备用空闲表的关系

第一部分:ExpMoveFreeHandles和备用空闲表的关系 ULONG ExpMoveFreeHandles ( IN PHANDLE_TABLE HandleTable ) { ULONG OldValue, NewValue; ULONG Index, OldIndex, NewIndex, FreeSize; PHANDLE_TABLE_ENTRY Entry, FirstEntry; EXHAND…...

[预订酒店]

预订酒店 真题目录: 点击去查看 E 卷 100分题型 题目描述 放暑假了,小明决定到某旅游景点游玩,他在网上搜索到了各种价位的酒店(长度为n的数组A),他的心理价位是x元,请帮他筛选出k个最接近x元的酒店(n>=k>0),并由低到高打印酒店的价格。 输入描述 第一行:n,…...

java项目之基于ssm的学籍管理系统(源码+文档)

项目简介 基于ssm的学籍管理系统实现了以下功能: 学生信息管理: 学生信息新增 学生信息修改 学籍异动管理: 学籍异动添加 学籍异动删除 学籍异动修改 学生学业管理: 学生学业添加 学生学业修改 学生学业删除 学院信息管理&am…...

SpringBoot+Redis+Mybatis-plus黑马点评

短信登录 基于Session实现登录 流程: 发送短信验证码-->短信验证码注册登录-->校验登录状态(保存用户到ThreadLocal,方便后续使用) 不能每次请求服务都要进行登录状态校验,解决办法:拦截器 在Sp…...

算法-二叉树篇23-二叉搜索树中的插入操作

二叉搜索树中的插入操作 力扣题目链接 题目描述 给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同…...

[STM32]从零开始的STM32 BSRR、BRR、ODR寄存器讲解

一、前言 学习STM32一阵子以后,相信大家对STM32 GPIO的控制也有一定的了解了。之前在STM32 LED的教程中也教了大家如何使用寄存器以及库函数控制STM32的引脚从而点亮一个LED,之前的寄存器只是作为一个引入,并没有深层次的讲解,在教…...

DeepSeek-V3关键技术之一:DeepSeekMoE

DeepSeekMoE 是一种创新的大规模语言模型架构,旨在通过高效的计算流程和优化设计,在保持高性能的同时显著降低计算成本。 1. 架构设计 DeepSeekMoE 基于 Transformer 架构,融合了以下核心技术: 专家混合系统(Mixture…...