mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-11-05 07:51:36 +08:00
Merge pull request #129 from ArduPilot/pr-usec-wait
stm32: allow for less than 1ms wait time on ChibiOS
This commit is contained in:
@@ -17,12 +17,13 @@ namespace uavcan_stm32
|
|||||||
*/
|
*/
|
||||||
bool BusEvent::wait(uavcan::MonotonicDuration duration)
|
bool BusEvent::wait(uavcan::MonotonicDuration duration)
|
||||||
{
|
{
|
||||||
static const uavcan::int64_t MaxDelayMSec = 0x000FFFFF;
|
// set maximum time to allow for 16 bit timers running at 1MHz
|
||||||
|
static const uavcan::int64_t MaxDelayUSec = 0x000FFFF;
|
||||||
|
|
||||||
const uavcan::int64_t msec = duration.toMSec();
|
const uavcan::int64_t usec = duration.toUSec();
|
||||||
msg_t ret = msg_t();
|
msg_t ret = msg_t();
|
||||||
|
|
||||||
if (msec <= 0)
|
if (usec <= 0)
|
||||||
{
|
{
|
||||||
# if (CH_KERNEL_MAJOR == 2)
|
# if (CH_KERNEL_MAJOR == 2)
|
||||||
ret = sem_.waitTimeout(TIME_IMMEDIATE);
|
ret = sem_.waitTimeout(TIME_IMMEDIATE);
|
||||||
@@ -33,11 +34,11 @@ bool BusEvent::wait(uavcan::MonotonicDuration duration)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
# if (CH_KERNEL_MAJOR == 2)
|
# if (CH_KERNEL_MAJOR == 2)
|
||||||
ret = sem_.waitTimeout((msec > MaxDelayMSec) ? MS2ST(MaxDelayMSec) : MS2ST(msec));
|
ret = sem_.waitTimeout((usec > MaxDelayUSec) ? US2ST(MaxDelayUSec) : US2ST(usec));
|
||||||
# elif defined(MS2ST) // ChibiOS 3+
|
# elif defined(MS2ST) // ChibiOS 3+
|
||||||
ret = sem_.wait((msec > MaxDelayMSec) ? MS2ST(MaxDelayMSec) : MS2ST(msec));
|
ret = sem_.wait((usec > MaxDelayUSec) ? US2ST(MaxDelayUSec) : US2ST(usec));
|
||||||
# else // ChibiOS 17+
|
# else // ChibiOS 17+
|
||||||
ret = sem_.wait(::systime_t((msec > MaxDelayMSec) ? TIME_MS2I(MaxDelayMSec) : TIME_MS2I(msec)));
|
ret = sem_.wait(::systime_t((usec > MaxDelayUSec) ? TIME_US2I(MaxDelayUSec) : TIME_US2I(usec)));
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
# if (CH_KERNEL_MAJOR == 2)
|
# if (CH_KERNEL_MAJOR == 2)
|
||||||
|
|||||||
Reference in New Issue
Block a user