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)
    
  • 相关阅读:
    查看端口有没有被占用
    微信公众号2()
    How to insert a segment of noise to music file
    puppet practice
    Docker Commands
    LempelZiv algorithm realization
    The algorithm of entropy realization
    Java network programmingguessing game
    Deploy Openstack with RDO and Change VNC console to Spice
    puppet overview
  • 原文地址:https://www.cnblogs.com/zhang-han/p/14123129.html
Copyright © 2011-2022 走看看