From 5178e7ec0ba0bb65c1bc9bde4c9421e695abb50a Mon Sep 17 00:00:00 2001 From: tyustli <43946994+tyustli@users.noreply.github.com> Date: Sun, 13 Feb 2022 14:50:51 +0800 Subject: [PATCH] [add] src/clock.c add hook for rt_tick_increase (#5569) * [add] src/clock.c add hook for rt_tick_increase * [fix] clock.c rt_tick_incerase hook function * Update clock.c Co-authored-by: guo --- include/rtthread.h | 3 +++ src/clock.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/include/rtthread.h b/include/rtthread.h index 45a7655be9..729ee4c405 100644 --- a/include/rtthread.h +++ b/include/rtthread.h @@ -85,6 +85,9 @@ void rt_tick_set(rt_tick_t tick); void rt_tick_increase(void); rt_tick_t rt_tick_from_millisecond(rt_int32_t ms); rt_tick_t rt_tick_get_millisecond(void); +#ifdef RT_USING_HOOK +void rt_tick_sethook(void (*hook)(void)); +#endif void rt_system_timer_init(void); void rt_system_timer_thread_init(void); diff --git a/src/clock.c b/src/clock.c index 21be3a4203..0e88bf4d61 100644 --- a/src/clock.c +++ b/src/clock.c @@ -26,6 +26,32 @@ static volatile rt_tick_t rt_tick = 0; #endif /* RT_USING_SMP */ +#ifndef __on_rt_tick_hook + #define __on_rt_tick_hook() __ON_HOOK_ARGS(rt_tick_hook, ()) +#endif + +#if defined(RT_USING_HOOK) && defined(RT_HOOK_USING_FUNC_PTR) +static void (*rt_tick_hook)(void); + +/** + * @addtogroup Hook + */ + +/**@{*/ + +/** + * This function will set a hook function, which will be invoked when tick increase + * + * + * @param hook the hook function + */ +void rt_tick_sethook(void (*hook)(void)) +{ + rt_tick_hook = hook; +} +/**@}*/ +#endif /* RT_USING_HOOK */ + /** * @addtogroup Clock */ @@ -67,6 +93,8 @@ void rt_tick_increase(void) struct rt_thread *thread; rt_base_t level; + RT_OBJECT_HOOK_CALL(rt_tick_hook, ()); + level = rt_hw_interrupt_disable(); /* increase the global tick */