Browse Source

Merge pull request #2480 from HubertXie/master

【修复】修复ms转tick时计算溢出问题
Bernard Xiong 6 years ago
parent
commit
efd8b404a3
2 changed files with 10 additions and 5 deletions
  1. 1 1
      include/rtthread.h
  2. 9 4
      src/clock.c

+ 1 - 1
include/rtthread.h

@@ -75,7 +75,7 @@ void rt_system_tick_init(void);
 rt_tick_t rt_tick_get(void);
 void rt_tick_set(rt_tick_t tick);
 void rt_tick_increase(void);
-int  rt_tick_from_millisecond(rt_int32_t ms);
+rt_tick_t  rt_tick_from_millisecond(rt_int32_t ms);
 
 void rt_system_timer_init(void);
 void rt_system_timer_thread_init(void);

+ 9 - 4
src/clock.c

@@ -107,15 +107,20 @@ void rt_tick_increase(void)
  *
  * @return the calculated tick
  */
-int rt_tick_from_millisecond(rt_int32_t ms)
+rt_tick_t rt_tick_from_millisecond(rt_int32_t ms)
 {
-    int tick;
+    rt_tick_t tick;
 
     if (ms < 0)
+    {    
         tick = RT_WAITING_FOREVER;
+    }
     else
-        tick = (RT_TICK_PER_SECOND * ms + 999) / 1000;
-
+    {
+        tick = RT_TICK_PER_SECOND * (ms / 1000);
+        tick += (RT_TICK_PER_SECOND * (ms%1000) + 999) / 1000;
+    }
+    
     /* return the calculated tick */
     return tick;
 }