diff --git a/Marlin/MarlinSerial.cpp b/Marlin/MarlinSerial.cpp index ad23a062051a..abf3299b1d04 100644 --- a/Marlin/MarlinSerial.cpp +++ b/Marlin/MarlinSerial.cpp @@ -32,6 +32,8 @@ ring_buffer rx_buffer = { { 0 }, 0, 0 }; #endif +bool ser_chars_rejected = false; + FORCE_INLINE void store_char(unsigned char c) { int i = (unsigned int)(rx_buffer.head + 1) % RX_BUFFER_SIZE; @@ -42,6 +44,10 @@ FORCE_INLINE void store_char(unsigned char c) { if (i != rx_buffer.tail) { rx_buffer.buffer[rx_buffer.head] = c; rx_buffer.head = i; + } + else + { + ser_chars_rejected = true; } } diff --git a/Marlin/MarlinSerial.h b/Marlin/MarlinSerial.h index c59884a28792..399e86b60d8e 100644 --- a/Marlin/MarlinSerial.h +++ b/Marlin/MarlinSerial.h @@ -78,6 +78,8 @@ struct ring_buffer { int tail; }; +extern bool ser_chars_rejected; + #if UART_PRESENT(SERIAL_PORT) extern ring_buffer rx_buffer; #endif diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index d21bd599e97d..6e4472a3acbd 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -733,6 +733,13 @@ void setup() { * - Call LCD update */ void loop() { + if ( ser_chars_rejected ) { + SERIAL_ERROR_START; + SERIAL_ECHOLNPGM("Serial: incoming chars rejected - ring buffer full"); + //kill(PSTR("ERR: ring buffer full")); + ser_chars_rejected = false; + } + if (commands_in_queue < BUFSIZE - 1) get_command(); #if ENABLED(SDSUPPORT)