LvglV7.0.2框架(一)

Lvgl 任务调度

Tick

Lvgl跟系统类似,外部只需调用其心跳计数函数,其内部控制相关任务的运行与控制。

lv_tick_inc(x) 控制Lvgl内部tick计数增加x
lv_task_handler 循环执行注册的任务

数据结构

基础数据结构是双向链表lv_ll_t,根据优先级高低将所有任务挂在链表上,通过运行周期以及上次的运行时间点判断是否达到运行时间,达到则执行任务回调函数。

//任务结构体
typedef struct _lv_task_t {
    uint32_t period; /**< How often the task should run */
    uint32_t last_run; /**< Last time the task ran */
    lv_task_cb_t task_cb; /**< Task function */
    void * user_data; /**< Custom user data */
    int32_t repeat_count; /**< 1: Task times;  -1 : infinity;  0 : stop ;  n>0: residual times */
    uint8_t prio : 3; /**< Task priority */
} lv_task_t;

//链表结构体
typedef struct {
    uint32_t n_size;
    lv_ll_node_t * head;
    lv_ll_node_t * tail;
} lv_ll_t;

基础任务

刷新显示任务 _lv_disp_refr_task
输入读取任务 _lv_indev_read_task
动画任务 anim_task

  1. _lv_disp_refr_task
    刷新分为全局刷新以及布局刷新,主要看显示驱动注册时,采用的是否是完整的双缓冲buf,lvgl的刷新显示都是在这个任务进行的,根据各个控件的显示区域进行去重、联合等处理,获取最终需要刷新的区域,最后再通过design_cb获取控件再对应区域需要显示的数据

lv_disp_buf_init(&disp_buf, disp_buf1, disp_buf2, LV_HOR_RES* LV_VER_RES);

  1. lv_indev_read_task
    根据注册的输入设备类型以及读取返回的数据,进行事件的判断,并执行相应控件的回调函数
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值