Skip to content

Commit 8bb62cd

Browse files
Merge pull request #129 from ArduPilot/pr-usec-wait
stm32: allow for less than 1ms wait time on ChibiOS
2 parents c759e54 + a4754d1 commit 8bb62cd

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

libuavcan_drivers/stm32/driver/src/uc_stm32_thread.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,13 @@ namespace uavcan_stm32
1717
*/
1818
bool BusEvent::wait(uavcan::MonotonicDuration duration)
1919
{
20-
static const uavcan::int64_t MaxDelayMSec = 0x000FFFFF;
20+
// set maximum time to allow for 16 bit timers running at 1MHz
21+
static const uavcan::int64_t MaxDelayUSec = 0x000FFFF;
2122

22-
const uavcan::int64_t msec = duration.toMSec();
23+
const uavcan::int64_t usec = duration.toUSec();
2324
msg_t ret = msg_t();
2425

25-
if (msec <= 0)
26+
if (usec <= 0)
2627
{
2728
# if (CH_KERNEL_MAJOR == 2)
2829
ret = sem_.waitTimeout(TIME_IMMEDIATE);
@@ -33,11 +34,11 @@ bool BusEvent::wait(uavcan::MonotonicDuration duration)
3334
else
3435
{
3536
# if (CH_KERNEL_MAJOR == 2)
36-
ret = sem_.waitTimeout((msec > MaxDelayMSec) ? MS2ST(MaxDelayMSec) : MS2ST(msec));
37+
ret = sem_.waitTimeout((usec > MaxDelayUSec) ? US2ST(MaxDelayUSec) : US2ST(usec));
3738
# elif defined(MS2ST) // ChibiOS 3+
38-
ret = sem_.wait((msec > MaxDelayMSec) ? MS2ST(MaxDelayMSec) : MS2ST(msec));
39+
ret = sem_.wait((usec > MaxDelayUSec) ? US2ST(MaxDelayUSec) : US2ST(usec));
3940
# else // ChibiOS 17+
40-
ret = sem_.wait(::systime_t((msec > MaxDelayMSec) ? TIME_MS2I(MaxDelayMSec) : TIME_MS2I(msec)));
41+
ret = sem_.wait(::systime_t((usec > MaxDelayUSec) ? TIME_US2I(MaxDelayUSec) : TIME_US2I(usec)));
4142
# endif
4243
}
4344
# if (CH_KERNEL_MAJOR == 2)

0 commit comments

Comments
 (0)