sched: Move timer dispatch loop to board code

Rename sched_timer_kick() to sched_timer_dispatch() and move its loop
into its callers in the board code.  This eliminates the need to
export timer_try_set_next() from the board code.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2017-03-27 16:38:01 -04:00
parent 7436ec093a
commit 6d05dd07f5
8 changed files with 63 additions and 50 deletions

View file

@ -70,11 +70,6 @@ timer_repeat_set(uint16_t next)
TIFR1 = 1<<OCF1B;
}
ISR(TIMER1_COMPA_vect)
{
sched_timer_kick();
}
static void
timer_init(void)
{
@ -143,7 +138,7 @@ timer_periodic(void)
// Set the next timer wake time (in absolute clock ticks) or return 1
// if the next timer is too close to schedule. Caller must disable
// irqs.
uint8_t
static uint8_t
timer_try_set_next(unsigned int target)
{
uint16_t next = target;
@ -189,6 +184,19 @@ fail:
shutdown("Rescheduled timer in the past");
}
// Harware OCR1A interrupt handler
ISR(TIMER1_COMPA_vect)
{
for (;;) {
uint16_t next_waketime = sched_timer_dispatch();
// Schedule next timer event (or run next timer if it's ready)
uint8_t res = timer_try_set_next(next_waketime);
if (res)
break;
}
}
// Periodic background task that temporarily boosts priority of
// timers. This helps prioritize timers when tasks are idling.
static void