From 756c13dfa4172ae5722f491fbbbbf9c4494cd27c Mon Sep 17 00:00:00 2001 From: Ferdinand Bachmann <theferdi265@gmail.com> Date: Sat, 31 Aug 2019 01:19:35 +0200 Subject: [PATCH] epicardium/rtc: fix numerically unstable subsecond decoding the subsecond encoding function from epic_rtc_set_milliseconds and the corresponding decoding function from epic_rtc_get_milliseconds are not numerically stable. i.e., encoding 5 milliseconds to 20 subsecs and immediately afterwards decoding that yields 4 milliseconds. Adding a bias of 999 (0.24 milliseconds) to the decoding function makes it numerically stable, while never decoding any subsecond value to more than 999 milliseconds. --- epicardium/modules/rtc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/epicardium/modules/rtc.c b/epicardium/modules/rtc.c index b07fb6fcc..24cf783cc 100644 --- a/epicardium/modules/rtc.c +++ b/epicardium/modules/rtc.c @@ -44,7 +44,7 @@ uint64_t epic_rtc_get_milliseconds(void) while (RTC_GetTime(&sec, &subsec) == E_BUSY) { vTaskDelay(pdMS_TO_TICKS(4)); } - return subsec * 1000ULL / 4096 + sec * 1000ULL; + return (subsec * 1000ULL + 999ULL) / 4096 + sec * 1000ULL; } void epic_rtc_set_milliseconds(uint64_t milliseconds) -- GitLab