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:
parent
1c0dc2ac3e
commit
3ca01eccae
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user