diff --git a/sched/clock/clock_gettime.c b/sched/clock/clock_gettime.c index 824fa73fc5..f2e05efcdc 100644 --- a/sched/clock/clock_gettime.c +++ b/sched/clock/clock_gettime.c @@ -60,7 +60,6 @@ int clock_gettime(clockid_t clock_id, struct timespec *tp) { #ifndef CONFIG_CLOCK_TIMEKEEPING struct timespec ts; - uint32_t carry; #endif int ret = OK; @@ -120,25 +119,8 @@ int clock_gettime(clockid_t clock_id, struct timespec *tp) */ flags = spin_lock_irqsave(NULL); - - ts.tv_sec += g_basetime.tv_sec; - ts.tv_nsec += g_basetime.tv_nsec; - + clock_timespec_add(&g_basetime, &ts, tp); spin_unlock_irqrestore(NULL, flags); - - /* Handle carry to seconds. */ - - if (ts.tv_nsec >= NSEC_PER_SEC) - { - carry = ts.tv_nsec / NSEC_PER_SEC; - ts.tv_sec += carry; - ts.tv_nsec -= (carry * NSEC_PER_SEC); - } - - /* And return the result to the caller. */ - - tp->tv_sec = ts.tv_sec; - tp->tv_nsec = ts.tv_nsec; } #endif /* CONFIG_CLOCK_TIMEKEEPING */ } diff --git a/sched/clock/clock_initialize.c b/sched/clock/clock_initialize.c index 8d53f233dc..f61e9b783a 100644 --- a/sched/clock/clock_initialize.c +++ b/sched/clock/clock_initialize.c @@ -309,7 +309,6 @@ void clock_resynchronize(FAR struct timespec *rtc_diff) struct timespec curr_ts; struct timespec rtc_diff_tmp; irqstate_t flags; - int32_t carry; int ret; if (rtc_diff == NULL) @@ -346,17 +345,7 @@ void clock_resynchronize(FAR struct timespec *rtc_diff) * was last set, this gives us the current time. */ - curr_ts.tv_sec = bias.tv_sec + g_basetime.tv_sec; - curr_ts.tv_nsec = bias.tv_nsec + g_basetime.tv_nsec; - - /* Handle carry to seconds. */ - - if (curr_ts.tv_nsec >= NSEC_PER_SEC) - { - carry = curr_ts.tv_nsec / NSEC_PER_SEC; - curr_ts.tv_sec += carry; - curr_ts.tv_nsec -= (carry * NSEC_PER_SEC); - } + clock_timespec_add(&bias, &g_basetime, &curr_ts); /* Check if RTC has advanced past system time. */ @@ -377,29 +366,7 @@ void clock_resynchronize(FAR struct timespec *rtc_diff) { /* Output difference between time at entry and new current time. */ - rtc_diff->tv_sec = rtc_time.tv_sec - curr_ts.tv_sec; - rtc_diff->tv_nsec = rtc_time.tv_nsec - curr_ts.tv_nsec; - - /* Handle carry to seconds. */ - - if (rtc_diff->tv_nsec < 0) - { - carry = -((-(rtc_diff->tv_nsec + 1)) / NSEC_PER_SEC + 1); - } - else if (rtc_diff->tv_nsec >= NSEC_PER_SEC) - { - carry = rtc_diff->tv_nsec / NSEC_PER_SEC; - } - else - { - carry = 0; - } - - if (carry != 0) - { - rtc_diff->tv_sec += carry; - rtc_diff->tv_nsec -= (carry * NSEC_PER_SEC); - } + clock_timespec_subtract(&rtc_time, &curr_ts, rtc_diff); /* Add the sleep time to correct system timer */