Browse Source

add function rt_hw_1ms_tick_get()

Meco Man 4 years ago
parent
commit
c2e15e003c

+ 1 - 1
bsp/stm32/libraries/HAL_Drivers/drv_common.c

@@ -58,7 +58,7 @@ void SysTick_Handler(void)
 
 
 uint32_t HAL_GetTick(void)
 uint32_t HAL_GetTick(void)
 {
 {
-    return rt_tick_get() * 1000 / RT_TICK_PER_SECOND;
+    return rt_hw_1ms_tick_get();
 }
 }
 
 
 void HAL_SuspendTick(void)
 void HAL_SuspendTick(void)

+ 2 - 1
components/net/lwip-1.4.1/src/arch/sys_arch.c

@@ -32,6 +32,7 @@
  */
  */
 
 
 #include <rtthread.h>
 #include <rtthread.h>
+#include <rthw.h>
 
 
 #include "lwip/sys.h"
 #include "lwip/sys.h"
 #include "lwip/opt.h"
 #include "lwip/opt.h"
@@ -617,7 +618,7 @@ u32_t sys_jiffies(void)
 
 
 u32_t sys_now(void)
 u32_t sys_now(void)
 {
 {
-	return rt_tick_get() * (1000 / RT_TICK_PER_SECOND);
+    return rt_hw_1ms_tick_get();
 }
 }
 
 
 #ifdef RT_LWIP_PPP
 #ifdef RT_LWIP_PPP

+ 2 - 1
components/net/lwip-2.0.2/src/arch/sys_arch.c

@@ -32,6 +32,7 @@
  */
  */
 
 
 #include <rtthread.h>
 #include <rtthread.h>
+#include <rthw.h>
 
 
 #include "lwip/sys.h"
 #include "lwip/sys.h"
 #include "lwip/opt.h"
 #include "lwip/opt.h"
@@ -627,7 +628,7 @@ u32_t sys_jiffies(void)
 
 
 u32_t sys_now(void)
 u32_t sys_now(void)
 {
 {
-    return rt_tick_get() * (1000 / RT_TICK_PER_SECOND);
+    return rt_hw_1ms_tick_get();
 }
 }
 
 
 
 

+ 2 - 1
components/net/lwip-2.1.2/src/arch/sys_arch.c

@@ -33,6 +33,7 @@
  */
  */
 
 
 #include <rtthread.h>
 #include <rtthread.h>
+#include <rthw.h>
 
 
 #include "lwip/sys.h"
 #include "lwip/sys.h"
 #include "lwip/opt.h"
 #include "lwip/opt.h"
@@ -641,7 +642,7 @@ u32_t sys_jiffies(void)
 
 
 u32_t sys_now(void)
 u32_t sys_now(void)
 {
 {
-    return rt_tick_get() * (1000 / RT_TICK_PER_SECOND);
+    return rt_hw_1ms_tick_get();
 }
 }
 
 
 #if MEM_OVERFLOW_CHECK || MEMP_OVERFLOW_CHECK
 #if MEM_OVERFLOW_CHECK || MEMP_OVERFLOW_CHECK

+ 5 - 0
include/rthw.h

@@ -134,6 +134,11 @@ void rt_hw_exception_install(rt_err_t (*exception_handle)(void *context));
  */
  */
 void rt_hw_us_delay(rt_uint32_t us);
 void rt_hw_us_delay(rt_uint32_t us);
 
 
+/*
+ * provides a tick value ALWAYS in millisecond
+ */
+rt_tick_t rt_hw_1ms_tick_get(void);
+
 #ifdef RT_USING_SMP
 #ifdef RT_USING_SMP
 typedef union {
 typedef union {
     unsigned long slock;
     unsigned long slock;

+ 17 - 0
src/clock.c

@@ -13,6 +13,7 @@
  * 2010-07-13     Bernard      fix rt_tick_from_millisecond issue found by kuronca
  * 2010-07-13     Bernard      fix rt_tick_from_millisecond issue found by kuronca
  * 2011-06-26     Bernard      add rt_tick_set function.
  * 2011-06-26     Bernard      add rt_tick_set function.
  * 2018-11-22     Jesven       add per cpu tick
  * 2018-11-22     Jesven       add per cpu tick
+ * 2020-12-29     Meco Man     add function rt_hw_1ms_tick_get()
  */
  */
 
 
 #include <rthw.h>
 #include <rthw.h>
@@ -116,5 +117,21 @@ rt_tick_t rt_tick_from_millisecond(rt_int32_t ms)
 }
 }
 RTM_EXPORT(rt_tick_from_millisecond);
 RTM_EXPORT(rt_tick_from_millisecond);
 
 
+/**
+ * This function provides a tick value ALWAYS in millisecond
+ *
+ * @return 1ms-based tick
+ */
+RT_WEAK rt_tick_t rt_hw_1ms_tick_get(void)
+{
+#if 1000 % RT_TICK_PER_SECOND == 0
+    return rt_tick_get() * (1000U / RT_TICK_PER_SECOND);
+#else
+    #warning "rt-thread cannot provide a correct 1ms-based tick any longer,\
+    please redefine this function in another file by using a high-precision hard-timer."
+    return 0;
+#endif
+}
+
 /**@}*/
 /**@}*/