sched/clock/clock_initialize.c: clock_inittime() needs to be done with CONFIG_SCHED_TICKLESS and clock_initialize should skip clock_inittime() for external RTC case since the RTC isn't ready yet.

This commit is contained in:
Xiang Xiao 2018-11-12 06:55:53 -06:00 committed by Gregory Nutt
parent f0c5c75042
commit 2bc709d4b9

View File

@ -65,9 +65,9 @@
#ifndef CONFIG_SCHED_TICKLESS #ifndef CONFIG_SCHED_TICKLESS
#ifdef CONFIG_SYSTEM_TIME64 #ifdef CONFIG_SYSTEM_TIME64
volatile uint64_t g_system_timer; volatile uint64_t g_system_timer = INITIAL_SYSTEM_TIMER_TICKS;
#else #else
volatile uint32_t g_system_timer; volatile uint32_t g_system_timer = INITIAL_SYSTEM_TIMER_TICKS;
#endif #endif
#endif #endif
@ -170,37 +170,31 @@ static inline int clock_basetime(FAR struct timespec *tp)
* *
****************************************************************************/ ****************************************************************************/
#ifdef CONFIG_RTC
static void clock_inittime(void) static void clock_inittime(void)
{ {
/* (Re-)initialize the time value to match the RTC */ /* (Re-)initialize the time value to match the RTC */
#ifndef CONFIG_CLOCK_TIMEKEEPING #ifndef CONFIG_CLOCK_TIMEKEEPING
#ifndef CONFIG_RTC_HIRES struct timespec ts;
clock_basetime(&g_basetime); clock_basetime(&g_basetime);
#endif clock_systimespec(&ts);
#ifndef CONFIG_SCHED_TICKLESS
g_system_timer = INITIAL_SYSTEM_TIMER_TICKS; /* Adjust base time to hide initial timer ticks. */
if (g_system_timer > 0)
g_basetime.tv_sec -= ts.tv_sec;
g_basetime.tv_nsec -= ts.tv_nsec;
while (g_basetime.tv_nsec < 0)
{ {
struct timespec ts; g_basetime.tv_nsec += NSEC_PER_SEC;
g_basetime.tv_sec--;
(void)clock_ticks2time((sclock_t)g_system_timer, &ts);
/* Adjust base time to hide initial timer ticks. */
g_basetime.tv_sec -= ts.tv_sec;
g_basetime.tv_nsec -= ts.tv_nsec;
while (g_basetime.tv_nsec < 0)
{
g_basetime.tv_nsec += NSEC_PER_SEC;
g_basetime.tv_sec--;
}
} }
#endif /* !CONFIG_SCHED_TICKLESS */
#else #else
clock_inittimekeeping(); clock_inittimekeeping();
#endif #endif
} }
#endif
/**************************************************************************** /****************************************************************************
* Public Functions * Public Functions
@ -222,11 +216,11 @@ void clock_initialize(void)
*/ */
up_rtc_initialize(); up_rtc_initialize();
#endif
/* Initialize the time value to match the RTC */ /* Initialize the time value to match the RTC */
clock_inittime(); clock_inittime();
#endif
} }
/**************************************************************************** /****************************************************************************