현재 ATmega32u4를 프로그래밍 중입니다. Rx 핀에 수신 된 바이트가있을 때마다 실행되는 인터럽트 빌드를 사용하여 구현되는 직렬 통신을 구현했습니다. Rx 핀의 바이트는 Rx 핀에서 다른 바이트가 수신 될 때 대체되는 1 바이트 버퍼에 배치됩니다. 이것은 atmel에 내장 된 라이브러리입니다.AVR8 실시간 스케줄러, 시리얼 통신
ISR(USART1_RX_vect, ISR_BLOCK)
{
RingBuffer_Insert(&usart_rx_buffer,UDR1);
}
내 코드는 바이트가 Rx 핀에서 수신 될 때 인터럽트를 실행합니다. 바이트가 수신되면이 바이트는 링 버퍼 uart_rx_buffer에 입력되어 나중에 디코딩됩니다.
인터럽트가 실행 중이고 UART 인터럽트를 실행하기 전에 1 바이트 버퍼를 교체하면이 바이트가 손실됩니다.
이 결과는 다른 인터럽트가 전송 속도보다 오래 걸릴 수 없다는 것입니다. 그렇지 않으면 직렬 바이트가 손실됩니다.이 문제를 방지 할 수있는 방법이 있습니까? 이 문제를 해결하기
인터럽트 컨텍스트에서 작업을 수행하면 안되는 긴 인터럽트의 실행이 중요하지 않은 경우. 이 경우 ISR은 주 루프에서 처리되는 플래그 만 설정해야합니다. –