关于单片机:软件定时器框架
软件定时器文档软件定时器是一种在软件层面实现计时性能的机制,通过软件定时器,能够在特定工夫点或工夫距离触发特定的事件。软件定时器罕用于实现周期性工作、超时解决、定时器中断等性能。 软件定时器蕴含两个次要组件:定时服务器和定时客户端。 定时服务器用于工夫治理和定时器解决。定时客户端用于解决特定的超时解决,它须要注册到定时服务器并提供一个回调函数。软件定时器服务原型/* 定时服务器 */struct soft_timer_server{ uint32_t time; /* 以后工夫 */ struct soft_timer_list list; /* 定时器链表 */};time:以后工夫(从定时器启动到当初过来的工夫)。list:定时器链表(用于存储定时客户端)。struct soft_timer_client{ struct soft_timer_list list; /* 定时器链表 */ soft_timer_server_t server; /* 所属的服务器 */ uint32_t interval; /* 定时间隔时间 */ uint32_t timeout; /* 下次超时工夫 */ int (*cb)(soft_timer_client_t client, void *args); /* 超时回调函数 */ void *args; /* 超时回调函数参数 */ };list:定时器链表(用于挂载到服务器)。server:所属的服务器。interval:定时间隔时间(初始化时设置)。timeout:下次超时工夫。cb:回调函数。args:回调函数参数。初始化服务器void soft_timer_server_init(soft_timer_server_t server);参数形容server服务器句柄更新服务器工夫void soft_timer_server_update(soft_timer_server_t server, uint32_t time);参数形容server服务器句柄time更新过来的工夫服务器查看超时定时器,唤醒客户端void soft_timer_server_handle(soft_timer_server_t server);参数形容server服务器句柄增加新客户端int soft_timer_client_add(soft_timer_client_t client, uint32_t time, int (*cb)(soft_timer_client_t client, void *args), void *args, soft_timer_server_t server);参数形容client客户端句柄time客户端超时工夫cb回调函数args回调函数参数server服务器句柄返回 SOFT_TIMER_ERR_OK增加胜利错误码增加失败移除客户端int soft_timer_client_remove(soft_timer_client_t client);参数形容client客户端句柄返回 SOFT_TIMER_ERR_OK移除胜利错误码移除失败启动客户端int soft_timer_client_start(soft_timer_client_t client);参数形容client客户端句柄返回 SOFT_TIMER_ERR_OK启动胜利错误码启动失败暂停客户端int soft_timer_client_stop(soft_timer_client_t client);参数形容client客户端句柄返回 SOFT_TIMER_ERR_OK暂停胜利错误码暂停失败增加并启动新客户端int soft_timer_client_add_then_start(soft_timer_client_t client, uint32_t time, int (*cb)(soft_timer_client_t client, void *args), void *args, soft_timer_server_t server);参数形容client客户端句柄time客户端超时工夫cb回调函数args回调函数参数server服务器句柄返回 SOFT_TIMER_ERR_OK增加胜利错误码增加失败应用示例:/* 定义定时器服务器和客户端 */struct soft_timer_server server;struct soft_timer_client timer1, timer2, timer3;int timer1_callback(soft_timer_client_t client, void *args){ printf("timer1_callback\r\n"); return MR_ERR_OK;}int timer2_callback(soft_timer_client_t client, void *args){ printf("timer2_callback\r\n"); return MR_ERR_OK;}int timer3_callback(soft_timer_client_t client, void *args){ printf("timer3_callback\r\n"); soft_timer_client_stop(client); return MR_ERR_OK;}int main(void){ /* 初始化服务器 */ soft_timer_server_init(&server); /* 增加客户端到服务器并启动 */ soft_timer_client_add_then_start(&timer1, 5, timer1_callback, MR_NULL, &server); soft_timer_client_add_then_start(&timer2, 10, timer2_callback, MR_NULL, &server); soft_timer_client_add_then_start(&timer3, 15, timer3_callback, MR_NULL, &server); while (1) { /* 更新服务器时钟 */ soft_timer_server_update(&server, 1); /* 服务器解决客户端超时(放在哪里,回调就将在哪里被调用) */ soft_timer_server_handle(&server); }}---------- ...