定时器超时函数

软定时器最主要的目的是在经过设定的时间后,系统能够自动执行用户设定的动作。当定时器设定的时间到了,即超时时,执行的动作函数称之为定时器的超时函数。与线程不同的是,超时函数的执行上下文环境并未用显式给出。

在RT-Thread实时操作系统中,定时器超时函数存在着两种情况:

  • 超时函数在(系统时钟)中断上下文环境中执行;
  • 超时函数在线程的上下文环境中执行。
    如果超时函数是在中断上下文环境中执行,显然对于超时函数的要求与中断服务例程的要求相同:执行时间应该尽量短,执行时不应导致当前上下文挂起、等待。例如在中断上下文中执行的超时函数它不应该试图去申请动态内存、释放动态内存等(其中一个就包括rt_timer_delete函数调用)。

而超时函数在线程上下文中执行,则不会有这个限制,但是通常也要求超时函数执行时间应该足够短,而不应该影响到其他定时器或本次定时器的下一次周期性超时。这两种情况在RT-Thread定时器控制块中分别使用参数:RT_TIMER_FLAG_HARD_TIMER和RT_TIMER_FLAG_SOFT_TIMER指定。HARD_TIMER代表的是定时器超时函数执行上下文是在中断上下文环境中执行;SOFT_TIMER代表的是定时器函数执行的上下文是timer线程(在rtconfig.h头文件中应该定义宏RT_USING_TIMER_SOFT使timer线程能被使用)。