diff options
| -rw-r--r-- | cores/arduino/HardwareSerial.cpp | 9 | 
1 files changed, 9 insertions, 0 deletions
| diff --git a/cores/arduino/HardwareSerial.cpp b/cores/arduino/HardwareSerial.cpp index 5d62273..9f0a2ec 100644 --- a/cores/arduino/HardwareSerial.cpp +++ b/cores/arduino/HardwareSerial.cpp @@ -197,6 +197,15 @@ void HardwareSerial::flush()  size_t HardwareSerial::write(uint8_t c)  { +  // If the buffer and the data register is empty, just write the byte +  // to the data register and be done. This shortcut helps +  // significantly improve the effective datarate at high (> +  // 500kbit/s) bitrates, where interrupt overhead becomes a slowdown. +  if (_tx_buffer_head == _tx_buffer_tail && bit_is_set(*_ucsra, UDRE0)) { +    *_udr = c; +    sbi(*_ucsra, TXC0); +    return 1; +  }    int i = (_tx_buffer_head + 1) % SERIAL_BUFFER_SIZE;    // If the output buffer is full, there's nothing for it other than to  | 
