Hi,大家好,欢迎来到树莓派之littlevGL课堂,本节课带大家了解一下littleVGL的内置任务系统! 一 什么是任务系统 LittlevGL具有内置的任务系统。您可以注册一个函数以使其定期被调用。任务是在lv_task_handler()中处理和调用的,需要每隔几毫秒定期调用一次。 任务是非抢占式的,这意味着一个任务无法中断另一个任务,您可以在任务中调用任何与LittlevGL相关的功能。 其实就跟我们常用的定时任务差不多,我们需要定时调用这个lv_task_handler()函数,确保时间到了以后任务会被执行,其实也就是在这个handler里面是不断轮询哪些任务到期。 二 任务都有哪些API void lv_task_core_init(void) //初始化任务系统模块 lv_task_t *lv_task_create_basic(void) //创建一个空任务,没有设置周期和回调函数的任务 lv_task_t *lv_task_create(lv_task_cb_ttask_xcb, uint32_t period, lv_task_prio_tprio, void *user_data) //创建一个任务,推荐大家使用这个API void lv_task_del(lv_task_t *task) //删除一个任务 void lv_task_set_prio(lv_task_t *task, lv_task_prio_tprio) //设置优先级 void lv_task_set_period(lv_task_t *task, uint32_t period) //设置周期 void lv_task_ready(lv_task_t *task) //设置任务处于准备好的状态 void lv_task_once(lv_task_t *task) //设置运行一次 void lv_task_reset(lv_task_t *task) //重置任务 void lv_task_enable(bool en) //使能或者关闭任务 三 一个简单的例子 先看执行效果 代码 用户可下载"圆弧对象(lv_arc)的使用"文章末尾的Demo工程(点击我直接下载),参考圆弧对象(lv_arc)的使用文章,将以下Demo代码复制到Demo工程test.c文件空白处.然后在test.c文件的create_test()函数中增加task_test()函数测试。 static uint8_t count = 0; void my_task(lv_task_t * task) { char buffer[32]; count++; sprintf(buffer, "task count: %d", count); lv_label_set_text(task_label, buffer); } void task_test(void){ static uint32_t user_data = 10; task_label = lv_label_create(lv_scr_act(), NULL); /* 创建标签 */ lv_obj_align(task_label, NULL, LV_ALIGN_CENTER, -40, 0); /* 设置相对位置 */ lv_label_set_text(task_label, " "); lv_task_t * task = lv_task_create(my_task, 500, LV_TASK_PRIO_MID, &user_data); } lv_task_once(task); 那假如我们创建完了任务后又想修改周期时间怎么办?其实上面的列出的API列表中也都给大家给出了: lv_task_set_period(task, 1000); 当然我们也可以修改任务的回调函数: lv_task_set_cb(task, my_new_task); |