From 61071cb41c7e81a0be11fb3ccec54a60de2398ab Mon Sep 17 00:00:00 2001 From: eightycc Date: Wed, 7 May 2025 08:06:41 -0700 Subject: [PATCH] Improve update to mp_hal_delay_ms: o Test for console interrupt during RUN_BACKGROUND_TASK o Handle signedness of remaining tick/subtick values correctly for very large delays o Improve comments --- supervisor/shared/tick.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/supervisor/shared/tick.c b/supervisor/shared/tick.c index dc646ae07b..56021fc04f 100644 --- a/supervisor/shared/tick.c +++ b/supervisor/shared/tick.c @@ -114,13 +114,14 @@ void mp_hal_delay_ms(mp_uint_t delay_ms) { // or the user. while (remaining > 0 && !mp_hal_is_interrupted()) { RUN_BACKGROUND_TASKS; - remaining = end_subtick - supervisor_get_raw_subticks(); - // We break a bit early so we don't risk setting the alarm before the time when we call - // sleep. - if (remaining < 1) { + // Exit if interrupted while running background tasks + if (mp_hal_is_interrupted()) { break; } - uint32_t remaining_ticks = remaining / 32; + // Recalculate remaining delay after running background tasks + remaining = end_subtick - supervisor_get_raw_subticks(); + // If remaining delay is less than 1 tick, idle loop until end of delay + int64_t remaining_ticks = remaining / 32; if (remaining_ticks > 0) { port_interrupt_after_ticks(remaining_ticks); // Idle until an interrupt happens.