diff --git a/Src/SerialPortVirt.c b/Src/SerialPortVirt.c index d8c7d74..b9e735e 100644 --- a/Src/SerialPortVirt.c +++ b/Src/SerialPortVirt.c @@ -12,7 +12,7 @@ static uint16_t vSerialPortReceiveQueue(uint8_t *data, uint16_t size, uint32_t t uint16_t received = 0; uint32_t endMs = SystemGetMs() + timeout; - uint32_t leftMs; + uint32_t leftMs = 0; uint16_t granted = 0; @@ -21,7 +21,13 @@ static uint16_t vSerialPortReceiveQueue(uint8_t *data, uint16_t size, uint32_t t } while (size && (((timeout == SystemWaitForever) || (endMs > SystemGetMs())) || (received < granted))) { - leftMs = endMs - SystemGetMs(); + + if (timeout == SystemWaitForever) { + leftMs = SystemWaitForever; + } else { + leftMs = endMs - SystemGetMs(); + } + if (osMessageQueueGet(queueId, data, NULL, leftMs) == osOK) { --size; ++received;