mirror of https://github.com/arendst/Tasmota.git
Fix intermittent hardware watchdogs
Fix intermittent hardware watchdogs in case of high speed software serial flooding
This commit is contained in:
parent
430396832f
commit
48ae4b247c
|
@ -162,11 +162,11 @@ size_t TasmotaSerial::setRxBufferSize(size_t size) {
|
||||||
if (size != serial_buffer_size) {
|
if (size != serial_buffer_size) {
|
||||||
if (m_hardserial) {
|
if (m_hardserial) {
|
||||||
if (size > 256) { // Default hardware serial Rx buffer size
|
if (size > 256) { // Default hardware serial Rx buffer size
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
serial_buffer_size = size;
|
serial_buffer_size = size;
|
||||||
Serial.setRxBufferSize(serial_buffer_size);
|
Serial.setRxBufferSize(serial_buffer_size);
|
||||||
#endif // ESP8266
|
#endif // ESP8266
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
if (TSerial) {
|
if (TSerial) {
|
||||||
// RX Buffer can't be resized when Serial is already running
|
// RX Buffer can't be resized when Serial is already running
|
||||||
serial_buffer_size = size;
|
serial_buffer_size = size;
|
||||||
|
@ -176,7 +176,7 @@ size_t TasmotaSerial::setRxBufferSize(size_t size) {
|
||||||
TSerial->setRxBufferSize(serial_buffer_size);
|
TSerial->setRxBufferSize(serial_buffer_size);
|
||||||
Esp32Begin();
|
Esp32Begin();
|
||||||
}
|
}
|
||||||
#endif // ESP32
|
#endif // ESP32
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (m_buffer) {
|
else if (m_buffer) {
|
||||||
|
@ -425,6 +425,9 @@ void IRAM_ATTR TasmotaSerial::rxRead(void) {
|
||||||
if (next != (int)m_out_pos) {
|
if (next != (int)m_out_pos) {
|
||||||
m_buffer[m_in_pos] = rec;
|
m_buffer[m_in_pos] = rec;
|
||||||
m_in_pos = next;
|
m_in_pos = next;
|
||||||
|
} else {
|
||||||
|
// Buffer overrun - prep to exit and fix Hardware Watchdog in case of high speed flooding
|
||||||
|
loop_read = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
TM_SERIAL_WAIT_RCV_LOOP; // wait for stop bit
|
TM_SERIAL_WAIT_RCV_LOOP; // wait for stop bit
|
||||||
|
|
Loading…
Reference in New Issue