LVGL学习笔记

LVGL的内部机制初步了解

LVGL的定时器处理程序是其内部的一个重要组件,负责管理并调度各种任务,以确保界面的流畅运行和响应性能,可以说LVGL是由定时器处理程序驱动起来的。

int main(int argc, char *argv[])
 {
 /*Initialize LVGL (初始化LVGL库)*/
 lv_init();
 /*Initialize the HAL for LVGL (初始化LVGL的硬件抽象层(显示、触摸))*/
 lv_display_t * display = lv_windows_create_display(title, 800, 480, 100, FALSE, FALSE);
 lv_windows_acquire_pointer_indev(display);
 /*Output prompt information to the console, you can also use printf() to print directly
(将提示信息输出到控制台,也可以使用printf函数直接打印)*/
 LV_LOG_USER("LVGL initialization completed!");
 /*Run the demo(运行demo)*/
 //lv_demo_widgets();
 char * demo_str[] = {"widgets"};
 lv_demos_create(demo_str, strlen((char * )demo_str));
 }
 }
 return 0;
 while(1) {
 /* Periodically call the lv_task handler.
 * It could be done in a timer interrupt or an OS task too.
 * 定期调用lv_task处理(定时器)程序。
* 它也可以在定时器中断或操作系统任务中完成。*/
 lv_task_handler();
 usleep(5000);       
/*Just to let the system breath(不一直占用系统资源)*

可以看到,在循环中不断调用定时器处理程序,管理并调度各种任务。

LVGL的定时器处理程序是一个内置的任务系统,允许开发者注册函数,使其可以定期被调用,它帮助管理时间敏感的操作(毫秒级别)和周期性的活动。
LVGL中的定时器是非抢占式的。也就是说一旦一个定时器任务开始执行,他会运行直到函数退出,期间不会被其他定时器任务中断。所以我们要确保注册的定时器任务不会运行太长时间,否则会影响整个系统的相应性能

LVGL的定时器任务调度机制

一、定时器触发方式

  • 基于事件驱动:
    其内部维护一个定时器列表,在==lv_task_handler()==中通过计算时间差来检测定时器是否到期。每次主循环迭代时,会检查所有定时器,执行已到期的回调函数,属于非阻塞的延迟执行机制

二、任务执行模式

  • LVGL采协作式但线程调度,任务(定时器回调、动画、事件处理)按以下规则运行:
    - 顺序执行:每个到期定时器的回调函数会一次性完整执行,完成后才会处理下一个任务
    - 优先级控制:定时器可设置优先级,但仅影响执行顺序

因为没有时间片划分,每次任务都要执行完成才会执行下一个任务,所以任务必须快速结束,否则会影响其他任务的执行

裁剪LVGL

LVGL的裁剪在lv_conf.h文件中进行
我们可以尝试关闭lv_conf.h文件中的WIDGETSTIEMES部分功能来验证

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值