Browse Source

[ctime]解决clock_gettime计算出来的nsec超过1sec的问题

goldengrandpa 2 years ago
parent
commit
e88a19467e
1 changed files with 6 additions and 1 deletions
  1. 6 1
      components/libc/compilers/common/ctime.c

+ 6 - 1
components/libc/compilers/common/ctime.c

@@ -677,8 +677,13 @@ int clock_gettime(clockid_t clockid, struct timespec *tp)
             level = rt_hw_interrupt_disable();
             level = rt_hw_interrupt_disable();
             tick = rt_tick_get(); /* get tick */
             tick = rt_tick_get(); /* get tick */
             tp->tv_sec  = _timevalue.tv_sec + tick / RT_TICK_PER_SECOND;
             tp->tv_sec  = _timevalue.tv_sec + tick / RT_TICK_PER_SECOND;
-            tp->tv_nsec = (_timevalue.tv_usec + (tick % RT_TICK_PER_SECOND) * MICROSECOND_PER_TICK) * 1000;
+            tp->tv_nsec = (_timevalue.tv_usec + (tick % RT_TICK_PER_SECOND) * MICROSECOND_PER_TICK) * 1000U;
             rt_hw_interrupt_enable(level);
             rt_hw_interrupt_enable(level);
+            if (tp->tv_nsec > 1000000000ULL)
+            {
+                tp->tv_nsec %= 1000000000ULL;
+                tp->tv_sec += 1;
+            }
         }
         }
         break;
         break;
 #endif
 #endif