From 97d197237c91dcf6032aff793fc3a93b9e3041cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?King=20K=C3=A9vin?= Date: Wed, 24 Jun 2020 11:47:05 +0200 Subject: [PATCH] uart: replace mod with masking --- lib/uart.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/uart.c b/lib/uart.c index 4e2e15c..bd1a598 100644 --- a/lib/uart.c +++ b/lib/uart.c @@ -30,7 +30,7 @@ #define UART_BAUDRATE 921600 /**< serial baud rate, in bits per second (with 8N1 8 bits, no parity bit, 1 stop bit settings) */ /* output ring buffer, indexes, and available memory */ -static volatile uint8_t tx_buffer[64] = {0}; /**< ring buffer for data to transmit */ +static volatile uint8_t tx_buffer[128] = {0}; /**< ring buffer for data to transmit (size must be a power of 2) */ static volatile uint16_t tx_i = 0; /**< current position of transmitted data */ static volatile uint16_t tx_used = 0; /**< how much data needs to be transmitted */ @@ -83,7 +83,7 @@ void uart_putchar_nonblocking(char c) // don't go to sleep since this might prevent an interrupt } usart_disable_tx_interrupt(USART(UART_ID)); // disable transmit interrupt to prevent index corruption - tx_buffer[(tx_i + tx_used) % LENGTH(tx_buffer)] = c; // put character in buffer + tx_buffer[(tx_i + tx_used) & (LENGTH(tx_buffer) - 1)] = c; // put character in buffer tx_used++; // update used buffer usart_enable_tx_interrupt(USART(UART_ID)); // enable transmit interrupt } @@ -96,7 +96,7 @@ void USART_ISR(UART_ID)(void) usart_disable_tx_interrupt(USART(UART_ID)); // disable transmit interrupt } else { usart_send(USART(UART_ID), tx_buffer[tx_i]); // put data in transmit register - tx_i = (tx_i + 1) % LENGTH(tx_buffer); // update location on buffer + tx_i = (tx_i + 1) & (LENGTH(tx_buffer) - 1); // update location on buffer tx_used--; // update used size } }