From ebb8a33c1a6151857212ab61bda5371a029dacf8 Mon Sep 17 00:00:00 2001 From: Pascal Langer Date: Thu, 10 Dec 2020 16:52:34 +0100 Subject: [PATCH] Fix potential bug with wait loops --- Multiprotocol/AFHDS2A_Rx_a7105.ino | 2 +- Multiprotocol/AFHDS2A_a7105.ino | 4 ++-- Multiprotocol/Arduino.ino | 2 +- Multiprotocol/Bugs_a7105.ino | 4 ++-- Multiprotocol/WK2x01_cyrf6936.ino | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Multiprotocol/AFHDS2A_Rx_a7105.ino b/Multiprotocol/AFHDS2A_Rx_a7105.ino index 1c4cc51..86264b8 100644 --- a/Multiprotocol/AFHDS2A_Rx_a7105.ino +++ b/Multiprotocol/AFHDS2A_Rx_a7105.ino @@ -153,7 +153,7 @@ uint16_t AFHDS2A_Rx_callback() case AFHDS2A_RX_BIND2 | AFHDS2A_RX_WAIT_WRITE: //Wait for TX completion pps_timer = micros(); - while (micros() - pps_timer < 700) // Wait max 700µs, using serial+telemetry exit in about 120µs + while ((uint32_t)(micros() - pps_timer) < 700) // Wait max 700µs, using serial+telemetry exit in about 120µs if (!(A7105_ReadReg(A7105_00_MODE) & 0x01)) break; A7105_SetTxRxMode(RX_EN); diff --git a/Multiprotocol/AFHDS2A_a7105.ino b/Multiprotocol/AFHDS2A_a7105.ino index 3ca8f1b..070e584 100644 --- a/Multiprotocol/AFHDS2A_a7105.ino +++ b/Multiprotocol/AFHDS2A_a7105.ino @@ -326,7 +326,7 @@ uint16_t ReadAFHDS2A() case AFHDS2A_BIND3|AFHDS2A_WAIT_WRITE: //Wait for TX completion start=micros(); - while ((uint16_t)micros()-start < 700) // Wait max 700µs, using serial+telemetry exit in about 120µs + while ((uint16_t)((uint16_t)micros()-start) < 700) // Wait max 700µs, using serial+telemetry exit in about 120µs if(!(A7105_ReadReg(A7105_00_MODE) & 0x01)) break; A7105_SetPower(); @@ -408,7 +408,7 @@ uint16_t ReadAFHDS2A() case AFHDS2A_DATA|AFHDS2A_WAIT_WRITE: //Wait for TX completion start=micros(); - while ((uint16_t)micros()-start < 700) // Wait max 700µs, using serial+telemetry exit in about 120µs + while ((uint16_t)((uint16_t)micros()-start) < 700) // Wait max 700µs, using serial+telemetry exit in about 120µs if(!(A7105_ReadReg(A7105_00_MODE) & 0x01)) break; A7105_SetPower(); diff --git a/Multiprotocol/Arduino.ino b/Multiprotocol/Arduino.ino index 2bb2858..cdca062 100644 --- a/Multiprotocol/Arduino.ino +++ b/Multiprotocol/Arduino.ino @@ -115,7 +115,7 @@ void delayMilliseconds(unsigned long ms) uint16_t lms = ms ; while (lms > 0) { - if (((uint16_t)micros() - start) >= 1000) { + if ((uint16_t)((uint16_t)micros() - start) >= 1000) { lms--; start += 1000; } diff --git a/Multiprotocol/Bugs_a7105.ino b/Multiprotocol/Bugs_a7105.ino index 6c4c771..8ec45ef 100644 --- a/Multiprotocol/Bugs_a7105.ino +++ b/Multiprotocol/Bugs_a7105.ino @@ -340,7 +340,7 @@ uint16_t ReadBUGS(void) case BUGS_BIND_2: //Wait for TX completion start=micros(); - while ((uint16_t)micros()-start < 500) // Wait max 500µs, using serial+telemetry exit in about 60µs + while ((uint16_t)((uint16_t)micros()-start) < 500) // Wait max 500µs, using serial+telemetry exit in about 60µs if(!(A7105_ReadReg(A7105_00_MODE) & 0x01)) break; A7105_SetTxRxMode(RX_EN); @@ -399,7 +399,7 @@ uint16_t ReadBUGS(void) case BUGS_DATA_2: //Wait for TX completion start=micros(); - while ((uint16_t)micros()-start < 500) // Wait max 500µs, using serial+telemetry exit in about 60µs + while ((uint16_t)((uint16_t)micros()-start) < 500) // Wait max 500µs, using serial+telemetry exit in about 60µs if(!(A7105_ReadReg(A7105_00_MODE) & 0x01)) break; A7105_SetTxRxMode(RX_EN); diff --git a/Multiprotocol/WK2x01_cyrf6936.ino b/Multiprotocol/WK2x01_cyrf6936.ino index 8513464..119d007 100644 --- a/Multiprotocol/WK2x01_cyrf6936.ino +++ b/Multiprotocol/WK2x01_cyrf6936.ino @@ -451,7 +451,7 @@ uint16_t WK_cb() } packet_sent = 0; uint8_t start=micros(); - while ((uint8_t)micros()-start < 100) // Wait max 100µs + while ((uint8_t)((uint8_t)micros()-start) < 100) // Wait max 100µs if(CYRF_ReadRegister(CYRF_04_TX_IRQ_STATUS) & 0x02) break; if((packet_count & 0x03) == 0)