zephyr/mphalport: Make mp_hal_wait_sem() always call k_poll().

Also even in the case of a zero timeout given.

Signed-off-by: danicampora <danicampora@gmail.com>
This commit is contained in:
danicampora 2024-09-05 22:47:38 +02:00 committed by Damien George
parent 1c0dc2ac3e
commit 3ca01eccae

View File

@ -54,15 +54,11 @@ void mp_hal_wait_sem(struct k_sem *sem, uint32_t timeout_ms) {
mp_handle_pending(true); mp_handle_pending(true);
MP_THREAD_GIL_EXIT(); MP_THREAD_GIL_EXIT();
k_timeout_t wait; k_timeout_t wait;
uint32_t dt = mp_hal_ticks_ms() - t0;
if (timeout_ms == (uint32_t)-1) { if (timeout_ms == (uint32_t)-1) {
wait = K_FOREVER; wait = K_FOREVER;
} else { } else {
uint32_t dt = mp_hal_ticks_ms() - t0; wait = K_MSEC((timeout_ms > dt) ? (timeout_ms - dt) : 0);
if (dt >= timeout_ms) {
MP_THREAD_GIL_ENTER();
return;
}
wait = K_MSEC(timeout_ms - dt);
} }
k_poll(wait_events, sem ? 2 : 1, wait); k_poll(wait_events, sem ? 2 : 1, wait);
if (wait_events[0].state == K_POLL_STATE_SIGNALED) { 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(); MP_THREAD_GIL_ENTER();
return; return;
} }
if (dt >= timeout_ms) {
MP_THREAD_GIL_ENTER();
return;
}
} }
} }