LVGL 定时器
LVGL 8.0 以后好像取消了自定义任务模块,想要使用多线程只能使用系统的线程。
一、定时器结构体
typedef struct _lv_timer_t { uint32_t period; // 定时器运行的频率 uint32_t last_run; // 定时器上次运行的时间 lv_timer_cb_t timer_cb; // 定时器注册的回调函数 void * user_data; // 用户自定义数据 int32_t repeat_count; // 重复次数,-1为永久重复,0为关闭,大于0为重复次数。 uint32_t paused : 1; // 定时器运行状态 } lv_timer_t;
二、常用函数
/* 创建定时器 */ lv_timer_t * lv_timer_create(lv_timer_cb_t timer_xcb, uint32_t period, void * user_data); /* 删除定时器 */ void lv_timer_del(lv_timer_t * timer); /* 使定时器挂起 */ void lv_timer_pause(lv_timer_t * timer); /* 使定时器进入运行状态 */ void lv_timer_resume(lv_timer_t * timer); /* 设置定时器的回调函数 */ void lv_timer_set_cb(lv_timer_t * timer, lv_timer_cb_t timer_cb); /* 设置定时器的运行频率 */ void lv_timer_set_period(lv_timer_t * timer, uint32_t period); /* 这里应该是读取定时器上次运行的时间 */ void lv_timer_ready(lv_timer_t * timer); /* 设置定时器运行的次数 */ void lv_timer_set_repeat_count(lv_timer_t * timer, int32_t repeat_count); /* 重置定时器运行的频率 */ void lv_timer_reset(lv_timer_t * timer); /* 启用或禁用整个定时器处理 */ void lv_timer_enable(bool en); /* 获取定时器空闲百分比 */ uint8_t lv_timer_get_idle(void); /* 遍历定时器 */ lv_timer_t * lv_timer_get_next(lv_timer_t * timer);
注意: 这里定时器使用的滴答时钟是移植时运行lv_tick_inc()的时间,比如我10ms运行一次lv_tick_inc(),那么lvgl的周期设置为100时,对应的是 100*10ms = 1s。
三、使用案例
-
案例一
重复运行定时器lv_timer_t * lvgl_task1 = NULL; void lvgl_task1_cb(lv_timer_t * tmr) { LV_LOG_USER("timer test ......"); } void lvgl_gui_test(void) { lv_obj_t *test_label = lv_label_create(lv_scr_act()); lv_label_set_text(test_label, LV_SYMBOL_OK); // 正常显示,则应显示一个 ✓ 字符。 lv_obj_align(test_label, LV_ALIGN_CENTER, 0, 0); lvgl_task1 = lv_timer_create(lvgl_task1_cb, 1000, 0); // 运行周期为lvgl的1000个滴答时钟 } -
案例二
运行指定次数的定时器lv_timer_t * lvgl_task1 = NULL; void lvgl_task1_cb(lv_timer_t * tmr) { LV_LOG_USER("timer test ......"); } void lvgl_gui_test(void) { lv_obj_t *test_label = lv_label_create(lv_scr_act()); lv_label_set_text(test_label, LV_SYMBOL_OK); // 正常显示,则应显示一个 ✓ 字符。 lv_obj_align(test_label, LV_ALIGN_CENTER, 0, 0); lvgl_task1 = lv_timer_create(lvgl_task1_cb, 1000, 0); // 运行周期为lvgl的1000个滴答时钟 lv_timer_set_repeat_count(lvgl_task1, 5); }
本文来自博客园,作者:浇筑菜鸟,转载请注明原文链接:https://www.cnblogs.com/jzcn/p/16829390.html
如本博客的内容侵犯了你的权益,请与以下地址联系,本人获知后,马上删除。同时本人深表歉意,并致以崇高的谢意! cn_jiaozhu@qq.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具