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)
    
  • 相关阅读:
    mybatis0206 延迟加载
    怎样关闭“粘滞键”?
    TNS-12557: TNS:protocol adapter not loadable TNS-12560: TNS:protocol adapter error
    HTTP协议头部与Keep-Alive模式详解
    oracle定时器执行一遍就不执行或本就不执行
    Inflation System Properties
    https://stackoverflow.com/questions/16130292/java-lang-outofmemoryerror-permgen-space-java-reflection
    java spring中对properties属性文件加密及其解密
    annotation配置springMVC的方法了事务不起作用
    SQLPlus在连接时通常有四种方式
  • 原文地址:https://www.cnblogs.com/zhang-han/p/14123129.html
Copyright © 2011-2022 走看看