mirror of
https://github.com/esp8266/Arduino.git
synced 2025-06-17 22:23:10 +03:00
Fixing race condition in Serial write (Brian Cook).
This commit is contained in:
@ -367,7 +367,6 @@ void HardwareSerial::flush()
|
|||||||
|
|
||||||
void HardwareSerial::write(uint8_t c)
|
void HardwareSerial::write(uint8_t c)
|
||||||
{
|
{
|
||||||
bool empty = (_tx_buffer->head == _tx_buffer->tail);
|
|
||||||
int i = (_tx_buffer->head + 1) % SERIAL_BUFFER_SIZE;
|
int i = (_tx_buffer->head + 1) % SERIAL_BUFFER_SIZE;
|
||||||
|
|
||||||
// If the output buffer is full, there's nothing for it other than to
|
// If the output buffer is full, there's nothing for it other than to
|
||||||
@ -378,11 +377,7 @@ void HardwareSerial::write(uint8_t c)
|
|||||||
_tx_buffer->buffer[_tx_buffer->head] = c;
|
_tx_buffer->buffer[_tx_buffer->head] = c;
|
||||||
_tx_buffer->head = i;
|
_tx_buffer->head = i;
|
||||||
|
|
||||||
if (empty) {
|
|
||||||
// The buffer was empty, so enable interrupt on
|
|
||||||
// USART Data Register empty. The interrupt handler will take it from there
|
|
||||||
sbi(*_ucsrb, _udrie);
|
sbi(*_ucsrb, _udrie);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Preinstantiate Objects //////////////////////////////////////////////////////
|
// Preinstantiate Objects //////////////////////////////////////////////////////
|
||||||
|
Reference in New Issue
Block a user