fix index corruption race condition
This commit is contained in:
parent
456ca4def2
commit
5430bdc0c0
|
@ -105,9 +105,11 @@ char usart_getchar(void)
|
||||||
__WFI(); // sleep until interrupt;
|
__WFI(); // sleep until interrupt;
|
||||||
}
|
}
|
||||||
char to_return = rx_buffer[rx_i]; // get the next available character
|
char to_return = rx_buffer[rx_i]; // get the next available character
|
||||||
|
usart_disable_rx_interrupt(USART); // disable receive interrupt to prevent index corruption
|
||||||
rx_i = (rx_i+1)%sizeof(rx_buffer); // update used buffer
|
rx_i = (rx_i+1)%sizeof(rx_buffer); // update used buffer
|
||||||
rx_used--; // update used buffer
|
rx_used--; // update used buffer
|
||||||
usart_received = rx_used; // update available data
|
usart_received = rx_used; // update available data
|
||||||
|
usart_enable_rx_interrupt(USART); // enable receive interrupt
|
||||||
return to_return;
|
return to_return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,6 +119,7 @@ void usart_putchar_nonblocking(char c)
|
||||||
usart_enable_tx_interrupt(USART); // enable transmit interrupt
|
usart_enable_tx_interrupt(USART); // enable transmit interrupt
|
||||||
__WFI(); // sleep until something happened
|
__WFI(); // sleep until something happened
|
||||||
}
|
}
|
||||||
|
usart_disable_tx_interrupt(USART); // disable transmit interrupt to prevent index corruption
|
||||||
tx_buffer[(tx_i+tx_used)%sizeof(tx_buffer)] = c; // put character in buffer
|
tx_buffer[(tx_i+tx_used)%sizeof(tx_buffer)] = c; // put character in buffer
|
||||||
tx_used++; // update used buffer
|
tx_used++; // update used buffer
|
||||||
usart_enable_tx_interrupt(USART); // enable transmit interrupt
|
usart_enable_tx_interrupt(USART); // enable transmit interrupt
|
||||||
|
|
Loading…
Reference in New Issue