【发布时间】:2014-09-07 23:14:20
【问题描述】:
我目前正在编写一个 ATmega32u4。我已经实现了串行通信,它是使用内置中断实现的,每次在 Rx 引脚上接收到一个字节时都会执行该中断。 Rx 引脚上的字节放置在一个字节缓冲区中,当在 Rx 引脚上接收到另一个字节时,该字节将被替换。这是 atmel 的内置库。
ISR(USART1_RX_vect, ISR_BLOCK)
{
RingBuffer_Insert(&usart_rx_buffer,UDR1);
}
当在 Rx 引脚上接收到一个字节时,我的代码会执行中断。当接收到一个字节时,这个字节被输入到我的环形缓冲区 uart_rx_buffer 中,稍后会在其中解码。
如果正在执行中断,这会导致在执行 UART 中断之前替换一个字节缓冲区,则该字节将丢失。
这样做的结果是其他中断的执行时间不能超过波特率,否则串行字节丢失。有什么办法可以避免这个问题?
【问题讨论】:
标签: c real-time avr job-scheduling serial-communication