Browse Source

[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 <guozhanxin@rt-thread.com>
tyustli 3 years ago
parent
commit
5178e7ec0b
2 changed files with 31 additions and 0 deletions
  1. 3 0
      include/rtthread.h
  2. 28 0
      src/clock.c

+ 3 - 0
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);

+ 28 - 0
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 */