Skip to content

Commit e15d5fd

Browse files
Merge pull request #199 from G4lile0/master
softSerial infinite loop timeout patch
2 parents 09409f0 + 222a20a commit e15d5fd

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

libraries/Basics/src/softSerial.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include "util/OneWire_direct_gpio.h"
44

55
#define SOFTSERIAL_BUFF_SIZE 255
6+
#define SOFTSERIAL_RX_TIMEOUT 3000
67
static float timedelay = 0;
78
static uint8_t Recev[8] ={0};
89
static uint8_t temp_bin = 0;
@@ -78,7 +79,7 @@ pbuffer(0)
7879

7980
}
8081

81-
//IO模拟串口初始�
82+
//IO模拟串口初始�?
8283
void softSerial::begin(uint16_t Baudrate)
8384
{
8485
timedelay = 1000000/Baudrate;
@@ -119,8 +120,8 @@ void softSerial::receiverBegin(void)
119120
delayTiker((uint32_t)(timedelay * tikerInUs)-tcnt);
120121

121122
uint8_t data = 0;
122-
while(1)
123-
{
123+
auto start = millis();
124+
do {
124125
for( uint8_t count = 0; count < 8; count++){
125126
data |= DIRECT_READ(_rxbaseReg, _rxbitmask)<<count;
126127
delayus(timedelay);
@@ -151,7 +152,7 @@ void softSerial::receiverBegin(void)
151152
};
152153
delayus(timedelay);
153154
data=0;
154-
}
155+
} while (millis() - start < SOFTSERIAL_RX_TIMEOUT);
155156
}
156157

157158
int softSerial::read(void)

0 commit comments

Comments
 (0)