mirror of
https://github.com/apache/nuttx.git
synced 2026-06-06 00:14:22 +08:00
Revert "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 reverts commit2bc709d4b9. Commit2bc709d4b9was intended to handle the case where up_timer_gettime may not start from zero case. However, this change has the side-effect of breaking every implementation of tickless mode: After this change the tickless timer structures are used before they are initialized in clock_inittime(). Initialization happens later when up_initialize is called() when arm_timer_initialize(). Since the tickless mode timer is very special, one solution might be to 1. Rename xxx_timer_initialize to up_timer_initialize 2 Move up_timer_initialize to include/nuttx/arch.h 3. Call it from clock subsystem instead up_initialize Basically, this change make timer initialization almost same as rtc initialization(up_rtc_initialize). For now, however, we just need to revert the change.
This commit is contained in:
@@ -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 = INITIAL_SYSTEM_TIMER_TICKS;
|
volatile uint64_t g_system_timer;
|
||||||
#else
|
#else
|
||||||
volatile uint32_t g_system_timer = INITIAL_SYSTEM_TIMER_TICKS;
|
volatile uint32_t g_system_timer;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -170,31 +170,37 @@ 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
|
||||||
struct timespec ts;
|
#ifndef CONFIG_RTC_HIRES
|
||||||
|
|
||||||
clock_basetime(&g_basetime);
|
clock_basetime(&g_basetime);
|
||||||
clock_systimespec(&ts);
|
#endif
|
||||||
|
#ifndef CONFIG_SCHED_TICKLESS
|
||||||
/* Adjust base time to hide initial timer ticks. */
|
g_system_timer = INITIAL_SYSTEM_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)
|
|
||||||
{
|
{
|
||||||
g_basetime.tv_nsec += NSEC_PER_SEC;
|
struct timespec ts;
|
||||||
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
|
||||||
@@ -216,11 +222,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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
|||||||
Reference in New Issue
Block a user