lv_task.h
lvgl自带任务管理系统,类似于软件定时器,并且支持优先级,相关API在lv_task.h
中
例子
创建任务task,周期1000ms,优先级LV_TASK_PRIO_MID,回调里变量自加,加到10删除此任务。
uint8_t test_data = 0;
static void task_cb(lv_task_t* task)
{
uint8_t *dat = (uint8_t*)task->user_data;
printf("tick: %d test_data %d\n",lv_tick_get(),*dat);
(*dat)++;
if(*dat == 10)
lv_task_del(task);
}
void lv_ex_task(void)
{
lv_task_t * task = lv_task_create(task_cb,1000,LV_TASK_PRIO_MID, &test_data);
}
仿真结果
可以看出时间不是很准确,其中lv_task_handler()是这样调用的
while (1) {
/* Periodically call the lv_task handler.
* It could be done in a timer interrupt or an OS task too.*/
lv_task_handler();
Sleep(10); /*Just to let the system breathe */
}
还有如下常用API
使任务回调函数只运行一次
void lv_task_once(lv_task_t * task);
复位任务
void lv_task_reset(lv_task_t * task);
设置任务回调周期
void lv_task_set_period(lv_task_t * task, uint32_t period);
使任务立即准备就绪
void lv_task_ready(lv_task_t * task);