From 55443fabb731459e21b45781c6d951edac5d75f4 Mon Sep 17 00:00:00 2001 From: tmk Date: Thu, 2 May 2019 20:57:48 +0900 Subject: [PATCH] core: Avoid deadlock when uart.c is used in ISR --- tmk_core/common/avr/uart.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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<