zoukankan      html  css  js  c++  java
  • 软件定时器的使用

    软件定时器的使用

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

    ​ 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)
    
  • 相关阅读:
    分位数(quantiles)、Z-score 与 F-score
    学术研究中的 NLP
    学术研究中的 NLP
    国内外免费电子书(数学、算法、图像、深度学习、机器学习)
    国内外免费电子书(数学、算法、图像、深度学习、机器学习)
    中英文对照 —— 缩略词
    内核编译及模块相关命令使用
    UVA 156 (13.08.04)
    hdu3117之矩阵快速幂
    系统运维技巧(三)——利用dd命令临时增加交换分区
  • 原文地址:https://www.cnblogs.com/zhang-han/p/14123129.html
Copyright © 2011-2022 走看看