diff --git a/arch/xtensa/src/common/espressif/esp_rtc.c b/arch/xtensa/src/common/espressif/esp_rtc.c index 2d08b1d056e..bb4e200b54e 100644 --- a/arch/xtensa/src/common/espressif/esp_rtc.c +++ b/arch/xtensa/src/common/espressif/esp_rtc.c @@ -611,6 +611,7 @@ static int esp_rtc_rdalarm(struct rtc_lowerhalf_s *lower, struct timespec ts; struct alm_cbinfo_s *cbinfo; irqstate_t flags; + uint64_t time_us; DEBUGASSERT(lower != NULL); DEBUGASSERT(alarminfo != NULL); @@ -624,10 +625,11 @@ static int esp_rtc_rdalarm(struct rtc_lowerhalf_s *lower, cbinfo = &priv->alarmcb[alarminfo->id]; - ts.tv_sec = (esp_hr_timer_time_us() + g_rtc_save->offset + - cbinfo->deadline_us) / USEC_PER_SEC; - ts.tv_nsec = ((esp_hr_timer_time_us() + g_rtc_save->offset + - cbinfo->deadline_us) % USEC_PER_SEC) * NSEC_PER_USEC; + time_us = esp_hr_timer_time_us() + g_rtc_save->offset + + cbinfo->deadline_us; + + ts.tv_sec = time_us / USEC_PER_SEC; + ts.tv_nsec = (time_us % USEC_PER_SEC) * NSEC_PER_USEC; localtime_r(&ts.tv_sec, (struct tm *)alarminfo->time);