diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2017-03-27 16:38:01 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2017-03-30 11:24:42 -0400 |
commit | 6d05dd07f59ef21dc81a299e865cdee1fc1d3f8e (patch) | |
tree | 5eb3eab42f4a7e0abe0c5b790cee9938a1f65564 /src/sched.c | |
parent | 7436ec093acc6f45e0fc2389de7294be43e3f0a8 (diff) | |
download | kutter-6d05dd07f59ef21dc81a299e865cdee1fc1d3f8e.tar.gz kutter-6d05dd07f59ef21dc81a299e865cdee1fc1d3f8e.tar.xz kutter-6d05dd07f59ef21dc81a299e865cdee1fc1d3f8e.zip |
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>
Diffstat (limited to 'src/sched.c')
-rw-r--r-- | src/sched.c | 55 |
1 files changed, 25 insertions, 30 deletions
diff --git a/src/sched.c b/src/sched.c index 2b96465f..8617108a 100644 --- a/src/sched.c +++ b/src/sched.c @@ -135,39 +135,34 @@ sched_del_timer(struct timer *del) irq_restore(flag); } -// Invoke timers - called from board timer irq code. -void -sched_timer_kick(void) +// Invoke the next timer - called from board hardware irq code. +unsigned int +sched_timer_dispatch(void) { - for (;;) { - // Invoke timer callback - struct timer *t = timer_list; - uint_fast8_t res; - uint32_t updated_waketime; - if (CONFIG_INLINE_STEPPER_HACK && likely(!t->func)) { - res = stepper_event(t); - updated_waketime = t->waketime; - } else { - res = t->func(t); - updated_waketime = t->waketime; - } - - // Update timer_list (rescheduling current timer if necessary) - unsigned int next_waketime = updated_waketime; - if (unlikely(res == SF_DONE)) { - next_waketime = t->next->waketime; - timer_list = t->next; - } else if (!timer_is_before(updated_waketime, t->next->waketime)) { - next_waketime = t->next->waketime; - timer_list = t->next; - insert_timer(t, updated_waketime); - } + // Invoke timer callback + struct timer *t = timer_list; + uint_fast8_t res; + uint32_t updated_waketime; + if (CONFIG_INLINE_STEPPER_HACK && likely(!t->func)) { + res = stepper_event(t); + updated_waketime = t->waketime; + } else { + res = t->func(t); + updated_waketime = t->waketime; + } - // Schedule next timer event (or run next timer if it's ready) - res = timer_try_set_next(next_waketime); - if (res) - break; + // Update timer_list (rescheduling current timer if necessary) + unsigned int next_waketime = updated_waketime; + if (unlikely(res == SF_DONE)) { + next_waketime = t->next->waketime; + timer_list = t->next; + } else if (!timer_is_before(updated_waketime, t->next->waketime)) { + next_waketime = t->next->waketime; + timer_list = t->next; + insert_timer(t, updated_waketime); } + + return next_waketime; } // Shutdown all user timers on an emergency stop. |