diff --git a/ports/zephyr/mphalport.c b/ports/zephyr/mphalport.c index fa64c4afc96e..2c9503284327 100644 --- a/ports/zephyr/mphalport.c +++ b/ports/zephyr/mphalport.c @@ -54,15 +54,11 @@ void mp_hal_wait_sem(struct k_sem *sem, uint32_t timeout_ms) { mp_handle_pending(true); MP_THREAD_GIL_EXIT(); k_timeout_t wait; + uint32_t dt = mp_hal_ticks_ms() - t0; if (timeout_ms == (uint32_t)-1) { wait = K_FOREVER; } else { - uint32_t dt = mp_hal_ticks_ms() - t0; - if (dt >= timeout_ms) { - MP_THREAD_GIL_ENTER(); - return; - } - wait = K_MSEC(timeout_ms - dt); + wait = K_MSEC((timeout_ms > dt) ? (timeout_ms - dt) : 0); } k_poll(wait_events, sem ? 2 : 1, wait); if (wait_events[0].state == K_POLL_STATE_SIGNALED) { @@ -73,5 +69,9 @@ void mp_hal_wait_sem(struct k_sem *sem, uint32_t timeout_ms) { MP_THREAD_GIL_ENTER(); return; } + if (dt >= timeout_ms) { + MP_THREAD_GIL_ENTER(); + return; + } } }