From 3166d35ca80579794c94d813de83e3522041b83a Mon Sep 17 00:00:00 2001 From: Will Sowerbutts Date: Sun, 22 Jan 2017 22:44:43 +0000 Subject: [PATCH] Kernel: Fix counting of individual seconds with CONFIG_RTC_INTERVAL --- Kernel/timer.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Kernel/timer.c b/Kernel/timer.c index eda5c3e7..4308f3f6 100644 --- a/Kernel/timer.c +++ b/Kernel/timer.c @@ -88,8 +88,14 @@ void updatetod(void) #ifdef CONFIG_RTC_INTERVAL /* on some platforms reading the RTC is expensive so we don't do it every decisecond. */ - if(++tod_deci != CONFIG_RTC_INTERVAL) + if(++tod_deci != CONFIG_RTC_INTERVAL){ + if(!(tod_deci % 10)){ /* we still need to count each second */ + rtcsec++; + slide=1; + goto addtod; + } return; + } tod_deci = 0; #endif @@ -98,12 +104,13 @@ void updatetod(void) if (rtcnew == rtcsec) return; slide = rtcnew - rtcsec; /* Seconds elapsed */ + rtcsec = rtcnew; +addtod: if (slide < 0) slide += 60; /* Seconds wrapped */ tod.low += slide; if (tod.low < slide) /* 32bit wrap ? */ tod.high++; - rtcsec = rtcnew; } void inittod(void) -- 2.34.1