软件定时器的使用

软件定时器的使用

​ 软件定时器是由操作系统提供的一类系统接口,它构建在硬件定时器基础之上(系统滴答定时器)。软件定时器使系统能够提供不受数目限制的定时器服务。

​ RT-Thread 操作系统提供的软件定时器,以系统节拍(OS Tick)的时间长度为定时单位,提供了基于系统节拍整数倍的定时能力,即定时数值是 OS Tick 的整数倍。例如一个 OS Tick 是 10ms,那么上层软件定时器只能提供 10ms,20ms,100ms 等时间精度的定时服务,而不能定时为 15ms、25ms、35ms等。

​ 当软件定时器所设定的定时时间到了后,会调用用户设置的定时器timeout回调函数,用户需要定时运行的程序会在回调函数中得到处理。

​ HARD_TIMER 模式的定时器超时函数在中断上下文环境中执行,此模式在定时器初始化时指定。在中断上下文环境中执行时,对于超时函数的要求与中断服务例程的要求相同:执行时间应该尽量短,执行时不应导致当前上下文挂起。 HARD_TIMER 模式是RT-Thread 软件定时器的默认方式。SOFTTIMER模式

​ SOFTTIMER模式的定时器超时函数在系统的timer线程的线程上下文中执行。通过宏定义RT_USING_TIMER_SOFT 来决定是否启用该模式。当启用SOFTTIMER 模式后,我们可以在定时器初始化时指定定时器工作在SOFTTIMER模式。

struct rt_timer
{
    struct rt_object parent;                 /**< inherit from rt_object */
    rt_list_t        row[RT_TIMER_SKIP_LIST_LEVEL];
    void (*timeout_func)(void *parameter);    /**< timeout function */
    void            *parameter;       /**< timeout function's parameter */
    rt_tick_t        init_tick;        /**< timer timeout tick */
    rt_tick_t        timeout_tick;     /**< timeout tick */
};
typedef struct rt_timer *rt_timer_t;
structrt_timer   static_timer;
rt_timer_t  dynamic_timer;

初始化与脱离

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_TIMER_FLAG_ONE_SHOT 
                                                RT_TIMER_FLAG_PERIODIC
                                                RT_TIMER_FLAG_HARD_TIMER
                                                RT_TIMER_FLAG_SOFT_TIMER 
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)
原文地址:https://www.cnblogs.com/zhang-han/p/14123129.html