summaryrefslogtreecommitdiff
path: root/components/libc
diff options
context:
space:
mode:
authorzhkag <[email protected]>2023-02-07 15:17:19 +0800
committerguo <[email protected]>2023-02-07 15:48:47 +0800
commitf4e9ec82bbfc1a7183fca6f7c7039ca2e3f1b992 (patch)
tree17661796fe2d5d18bbc553bcb16b2665f8108e66 /components/libc
parentbdd6811230be40bcaa5bd4a5ec1338b16dc6e18f (diff)
修复纳秒微妙混用转换错误
Diffstat (limited to 'components/libc')
-rw-r--r--components/libc/compilers/common/ctime.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/components/libc/compilers/common/ctime.c b/components/libc/compilers/common/ctime.c
index 0fa3449a35..7806f91de3 100644
--- a/components/libc/compilers/common/ctime.c
+++ b/components/libc/compilers/common/ctime.c
@@ -730,7 +730,9 @@ int clock_nanosleep(clockid_t clockid, int flags, const struct timespec *rqtp, s
rt_tick_t tick, tick_old = rt_tick_get();
if ((flags & TIMER_ABSTIME) == TIMER_ABSTIME)
{
- tick = (rqtp->tv_sec - _timevalue.tv_sec) * RT_TICK_PER_SECOND + (rqtp->tv_nsec - _timevalue.tv_usec) * (RT_TICK_PER_SECOND / NANOSECOND_PER_SECOND);
+ rt_int64_t ts = ((rqtp->tv_sec - _timevalue.tv_sec) * RT_TICK_PER_SECOND);
+ rt_int64_t tns = (rqtp->tv_nsec - _timevalue.tv_usec * 1000) * (RT_TICK_PER_SECOND / NANOSECOND_PER_SECOND);
+ tick = ts + tns;
rt_tick_t rt_tick = rt_tick_get();
tick = tick < rt_tick ? 0 : tick - rt_tick;
}
@@ -1216,7 +1218,7 @@ int timer_settime(timer_t timerid, int flags, const struct itimerspec *value,
return -1;
#else
rt_int64_t ts = ((value->it_value.tv_sec - _timevalue.tv_sec) * RT_TICK_PER_SECOND);
- rt_int64_t tns = (value->it_value.tv_nsec - _timevalue.tv_usec) * (RT_TICK_PER_SECOND / NANOSECOND_PER_SECOND);
+ rt_int64_t tns = (value->it_value.tv_nsec - _timevalue.tv_usec * 1000) * (RT_TICK_PER_SECOND / NANOSECOND_PER_SECOND);
rt_int64_t reload = ts + tns;
rt_tick_t rt_tick = rt_tick_get();
timer->reload = reload < rt_tick ? 0 : reload - rt_tick;