定时器管理

优质
小牛编辑
133浏览
2023-12-01

定时器管理接口

结构体

struct  rt_timer
 定时器控制块 更多...
 

宏定义

#define RT_TIMER_FLAG_DEACTIVATED   0x0
 定时器未激活
 
#define RT_TIMER_FLAG_ACTIVATED   0x1
 定时器已激活
 
#define RT_TIMER_FLAG_ONE_SHOT   0x0
 一次性计时器
 
#define RT_TIMER_FLAG_PERIODIC   0x2
 周期性定时器
 
#define RT_TIMER_FLAG_HARD_TIMER   0x0
 硬件定时器,定时器的回调函数将在系统时钟中断里调用。
 
#define RT_TIMER_FLAG_SOFT_TIMER   0x4
 软件定时器,定时器的回调函数将在定时器线程中调用。
 
#define RT_TIMER_CTRL_SET_TIME   0x0
 设置定时器时间
 
#define RT_TIMER_CTRL_GET_TIME   0x1
 获取定时器时间
 
#define RT_TIMER_CTRL_SET_ONESHOT   0x2
 将计时器更改为一次性定时器
 
#define RT_TIMER_CTRL_SET_PERIODIC   0x3
 将计时器更改为周期性定时器
 

类型定义

typedef struct rt_timerrt_timer_t
 定时器类型指针定义
 

函数

void rt_timer_init (rt_timer_t timer, const char *name, void(*timeout)(void *parameter), void *parameter, rt_tick_t time, rt_uint8_t flag)
 初始化定时器
 
rt_err_t rt_timer_detach (rt_timer_t timer)
 脱离定时器
 
rt_timer_t rt_timer_create (const char *name, void(*timeout)(void *parameter), void *parameter, rt_tick_t time, rt_uint8_t flag)
 创建定时器
 
rt_err_t rt_timer_delete (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, int cmd, void *arg)
 控制定时器
 

详细描述

定时器管理接口

RT-Thread的定时器提供两类定时器机制:第一类是单次触发定时器,这类定时器在启动后只会触发一次定时器事件, 然后定时器自动停止。第二类是周期触发定时器,这类定时器会周期性的触发定时器事件, 直到用户手动的停止,否则将永远持续执行下去。

另外,根据超时函数执行时所处的上下文环境,RT-Thread的定时器可以分为软件定时器和硬件定时器。 硬件定时器的超时函数在中断上下文环境中执行,可以在初始化/创建定时器时使用参数RT_TIMER_FLAG_HARD_TIMER来指定。 软件定时器的超时函数在timer线程的上下文环境中执行。可以在初始化/创建定时器时使用参数RT_TIMER_FLAG_SOFT_TIMER来指定。

函数说明

void rt_timer_init(rt_timer_t timer,
const char * name,
void(*)(void *parameter) timeout,
void * parameter,
rt_tick_t time,
rt_uint8_t flag 
)

初始化定时器

该函数将初始化一个定时器,通常该函数用于初始化一个静态定时器对象。

参数
timer静态定时器对象句柄
name定时器的名称
timeout超时回调函数
parameter超时回调函数的传入参数
time定时器的超时滴答数
flag定时器创建时的参数,支持的值包括单次定时、周期定时、 硬件定时器、软件定时器(可以用 “或” 关系取多个值)
rt_err_t rt_timer_detach(rt_timer_t timer)

脱离定时器

当一个静态定时器不需要再使用时,可以使用该函数接口把定时器对象从系统容器的定时器链表中删除, 但是定时器对象所占有的内存不会被释放。

参数
timer静态定时器对象句柄
返回
RT_EOK
rt_timer_t rt_timer_create(const char * name,
void(*)(void *parameter) timeout,
void * parameter,
rt_tick_t time,
rt_uint8_t flag 
)

创建定时器

调用该函数接口后,内核首先从动态内存堆中分配一个定时器控制块,然后对该控制块进行基本的初始化。

参数
name定时器名称
timeout超时回调函数
parameter超时回调函数的传入参数
time定时超时时间
flag定时器的标志位
返回
创建的定时器句柄
示例:
timer_sample.c.
rt_err_t rt_timer_delete(rt_timer_t timer)

删除定时器

系统不再使用动态定时器时,可使用该函数接口,系统会把这个定时器从 rt_timer_list 链表中删除,然后释放相应的定时器控制块占有的内存。

参数
timer将要被删除的定时器句柄
返回
RT_EOK
rt_err_t rt_timer_start(rt_timer_t timer)

启动定时器

当定时器被创建或者初始化以后,并不会被立即启动,必须在调用该函数接口后,才开始工作。

参数
timer将要被启动的定时器
返回
RT_EOK
示例:
timer_sample.c.
rt_err_t rt_timer_stop(rt_timer_t timer)

停止定时器

启动定时器以后,若想使它停止,可以调用该函数接口。

参数
timer定时器句柄,指向要停止的定时器控制块
返回
成功则返回 RT_EOK ; 返回 -RT_ERROR 时则说明已经处于停止状态
示例:
timer_sample.c.
rt_err_t rt_timer_control(rt_timer_t timer,
int cmd,
void * arg 
)

控制定时器

该函数可根据命令类型参数,来查看或改变定时器的设置。

参数
timer定时器句柄,指向将要控制的定时器控制块
cmd控制命令
arg控制命令相关的参数
返回
RT_EOK