diff --git a/libuavcan_drivers/stm32/driver/src/uc_stm32_thread.cpp b/libuavcan_drivers/stm32/driver/src/uc_stm32_thread.cpp index 374f1cf4b0..0c94044249 100644 --- a/libuavcan_drivers/stm32/driver/src/uc_stm32_thread.cpp +++ b/libuavcan_drivers/stm32/driver/src/uc_stm32_thread.cpp @@ -13,14 +13,18 @@ namespace uavcan_stm32 */ bool Event::wait(uavcan::MonotonicDuration duration) { + static const uavcan::int64_t MaxDelayMSec = 0x000FFFFF; + + const uavcan::int64_t msec = duration.toMSec(); msg_t ret = msg_t(); - if (!duration.isPositive()) + + if (msec <= 0) { - sem_.waitTimeout(TIME_IMMEDIATE); + ret = sem_.waitTimeout(TIME_IMMEDIATE); } else { - sem_.waitTimeout(MS2ST(duration.toMSec())); + ret = sem_.waitTimeout((msec > MaxDelayMSec) ? MS2ST(MaxDelayMSec) : MS2ST(msec)); } return ret == RDY_OK; }