From: tmk Date: Thu, 2 May 2019 11:57:48 +0000 (+0900) Subject: core: Avoid deadlock when uart.c is used in ISR X-Git-Url: https://git.friedersdorff.com/?a=commitdiff_plain;h=55443fabb731459e21b45781c6d951edac5d75f4;p=max%2Ftmk_keyboard.git core: Avoid deadlock when uart.c is used in ISR --- diff --git a/tmk_core/common/avr/uart.c b/tmk_core/common/avr/uart.c index d9d42390..0fec705f 100644 --- a/tmk_core/common/avr/uart.c +++ b/tmk_core/common/avr/uart.c @@ -66,7 +66,7 @@ // These buffers may be any size from 2 to 256 bytes. #define RX_BUFFER_SIZE 64 -#define TX_BUFFER_SIZE 40 +#define TX_BUFFER_SIZE 256 static volatile uint8_t tx_buffer[TX_BUFFER_SIZE]; static volatile uint8_t tx_buffer_head; @@ -95,6 +95,8 @@ void uart_putchar(uint8_t c) i = tx_buffer_head + 1; if (i >= TX_BUFFER_SIZE) i = 0; + // return immediately to avoid deadlock when interrupt is disabled(called from ISR) + if (tx_buffer_tail == i && (SREG & (1<