一 软件定时器相关函数
初始化定时器管理系统 | rt_system_timer_init |
rt_system_timer_thread_init | |
创建定时器 | rt_timer_t rt_timer_create(const char* name, //定时器的名称 void* parameter,//定时器超时函数的入口参数 rt_uint8_t flag);//定时器创建时的参数 |
删除定时器 | rt_err_t rt_timer_delete(rt_timer_t timer); |
初始化静态定时器 | void rt_timer_init(rt_timer_t timer,//定时器句柄 void (*timeout)(void* parameter), //定时器超时函数指针 void* parameter,//定时器超时函数的入口参数 rt_uint8_t flag);//定时器创建时的参数 |
脱离静态定时器 | rt_err_t rt_timer_detach(rt_timer_t timer); |
启动定时器 | rt_err_t rt_timer_start(rt_timer_t timer); |
停止定时器 | rt_err_t rt_timer_stop(rt_timer_t timer); |
控制定时器 | rt_err_t rt_timer_control(rt_timer_t timer, rt_uint8_t cmd, void* arg); |
二 使用定时器
关于软件定时器有以下几点需要注意:
- 软件定时器线程的优先级默认为 RT_TIMER_THREAD_PRIO,默认为 4
- 软件定时器的精度由系统节拍(RT_TICK_PER_SECOND)决定.
- 可以在rtconfig.h中配置是否使用软件定时器,以及定时器优先级,栈大小,节拍数
#include <rtthread.h>
/* 定时器的控制块 */
static rt_timer_t timer1;
/* 定时器1超时函数 */
static void timeout1(void* parameter)
{
}
/* 创建定时器1 */
timer1 = rt_timer_create("timer1", /* 定时器名字是 timer1 */
timeout1, /* 超时时回调的处理函数 */
RT_NULL, /* 超时函数的入口参数 */
10, /* 定时长度,以OS Tick为单位,即10个OS Tick */
RT_TIMER_FLAG_PERIODIC); /* 周期性定时器 */
/* 启动定时器 */
if (timer1 != RT_NULL) rt_timer_start(timer1);