commit
420478a052
|
@ -100,7 +100,8 @@ rt_tick_t rt_timer_next_timeout_tick(void);
|
||||||
void rt_timer_check(void);
|
void rt_timer_check(void);
|
||||||
|
|
||||||
#ifdef RT_USING_HOOK
|
#ifdef RT_USING_HOOK
|
||||||
void rt_timer_timeout_sethook(void (*hook)(struct rt_timer *timer));
|
void rt_timer_enter_sethook(void (*hook)(struct rt_timer *timer));
|
||||||
|
void rt_timer_exit_sethook(void (*hook)(struct rt_timer *timer));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**@}*/
|
/**@}*/
|
||||||
|
|
28
src/timer.c
28
src/timer.c
|
@ -43,7 +43,8 @@ static rt_uint8_t timer_thread_stack[RT_TIMER_THREAD_STACK_SIZE];
|
||||||
#ifdef RT_USING_HOOK
|
#ifdef RT_USING_HOOK
|
||||||
extern void (*rt_object_take_hook)(struct rt_object *object);
|
extern void (*rt_object_take_hook)(struct rt_object *object);
|
||||||
extern void (*rt_object_put_hook)(struct rt_object *object);
|
extern void (*rt_object_put_hook)(struct rt_object *object);
|
||||||
static void (*rt_timer_timeout_hook)(struct rt_timer *timer);
|
static void (*rt_timer_enter_hook)(struct rt_timer *timer);
|
||||||
|
static void (*rt_timer_exit_hook)(struct rt_timer *timer);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @addtogroup Hook
|
* @addtogroup Hook
|
||||||
|
@ -52,14 +53,25 @@ static void (*rt_timer_timeout_hook)(struct rt_timer *timer);
|
||||||
/**@{*/
|
/**@{*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function will set a hook function, which will be invoked when timer
|
* This function will set a hook function, which will be invoked when enter
|
||||||
* is timeout.
|
* timer timeout callback function.
|
||||||
*
|
*
|
||||||
* @param hook the hook function
|
* @param hook the hook function
|
||||||
*/
|
*/
|
||||||
void rt_timer_timeout_sethook(void (*hook)(struct rt_timer *timer))
|
void rt_timer_enter_sethook(void (*hook)(struct rt_timer *timer))
|
||||||
{
|
{
|
||||||
rt_timer_timeout_hook = hook;
|
rt_timer_enter_hook = hook;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function will set a hook function, which will be invoked when exit
|
||||||
|
* timer timeout callback function.
|
||||||
|
*
|
||||||
|
* @param hook the hook function
|
||||||
|
*/
|
||||||
|
void rt_timer_exit_sethook(void (*hook)(struct rt_timer *timer))
|
||||||
|
{
|
||||||
|
rt_timer_exit_hook = hook;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**@}*/
|
/**@}*/
|
||||||
|
@ -503,7 +515,7 @@ void rt_timer_check(void)
|
||||||
*/
|
*/
|
||||||
if ((current_tick - t->timeout_tick) < RT_TICK_MAX / 2)
|
if ((current_tick - t->timeout_tick) < RT_TICK_MAX / 2)
|
||||||
{
|
{
|
||||||
RT_OBJECT_HOOK_CALL(rt_timer_timeout_hook, (t));
|
RT_OBJECT_HOOK_CALL(rt_timer_enter_hook, (t));
|
||||||
|
|
||||||
/* remove timer from timer list firstly */
|
/* remove timer from timer list firstly */
|
||||||
_rt_timer_remove(t);
|
_rt_timer_remove(t);
|
||||||
|
@ -514,6 +526,7 @@ void rt_timer_check(void)
|
||||||
/* re-get tick */
|
/* re-get tick */
|
||||||
current_tick = rt_tick_get();
|
current_tick = rt_tick_get();
|
||||||
|
|
||||||
|
RT_OBJECT_HOOK_CALL(rt_timer_exit_hook, (t));
|
||||||
RT_DEBUG_LOG(RT_DEBUG_TIMER, ("current tick: %d\n", current_tick));
|
RT_DEBUG_LOG(RT_DEBUG_TIMER, ("current tick: %d\n", current_tick));
|
||||||
|
|
||||||
if ((t->parent.flag & RT_TIMER_FLAG_PERIODIC) &&
|
if ((t->parent.flag & RT_TIMER_FLAG_PERIODIC) &&
|
||||||
|
@ -578,7 +591,7 @@ void rt_soft_timer_check(void)
|
||||||
*/
|
*/
|
||||||
if ((current_tick - t->timeout_tick) < RT_TICK_MAX / 2)
|
if ((current_tick - t->timeout_tick) < RT_TICK_MAX / 2)
|
||||||
{
|
{
|
||||||
RT_OBJECT_HOOK_CALL(rt_timer_timeout_hook, (t));
|
RT_OBJECT_HOOK_CALL(rt_timer_enter_hook, (t));
|
||||||
|
|
||||||
/* move node to the next */
|
/* move node to the next */
|
||||||
n = n->next;
|
n = n->next;
|
||||||
|
@ -594,6 +607,7 @@ void rt_soft_timer_check(void)
|
||||||
/* re-get tick */
|
/* re-get tick */
|
||||||
current_tick = rt_tick_get();
|
current_tick = rt_tick_get();
|
||||||
|
|
||||||
|
RT_OBJECT_HOOK_CALL(rt_timer_exit_hook, (t));
|
||||||
RT_DEBUG_LOG(RT_DEBUG_TIMER, ("current tick: %d\n", current_tick));
|
RT_DEBUG_LOG(RT_DEBUG_TIMER, ("current tick: %d\n", current_tick));
|
||||||
|
|
||||||
/* lock scheduler */
|
/* lock scheduler */
|
||||||
|
|
Loading…
Reference in New Issue