diff --git a/components/libc/compilers/common/ctime.c b/components/libc/compilers/common/ctime.c index b6d613564b..d5aff8618b 100644 --- a/components/libc/compilers/common/ctime.c +++ b/components/libc/compilers/common/ctime.c @@ -677,8 +677,13 @@ int clock_gettime(clockid_t clockid, struct timespec *tp) level = rt_hw_interrupt_disable(); tick = rt_tick_get(); /* get tick */ 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); + if (tp->tv_nsec > 1000000000ULL) + { + tp->tv_nsec %= 1000000000ULL; + tp->tv_sec += 1; + } } break; #endif