임베디드 용어 사전
시리얼 통신

오버런

수신한 데이터를 꺼내기 전에 다음 데이터가 도착해 이전 값이 덮이는 상황. 데이터가 조용히 사라진다.

overrun. 수신은 계속되는데 소프트웨어가 못 따라간 것이다.

UART 수신 레지스터: [ A ]
                   ↑ 아직 안 읽었는데
다음 바이트 B 도착 → A 가 사라지고 오버런 플래그가 선다

원인

  • ISR 이 늦게 불린다 — 다른 인터럽트가 오래 잡고 있거나 우선순위가 낮다
  • 메인 루프에서 폴링으로 읽고 있다 — 다른 작업 중에는 못 읽는다
  • 보율이 높아 여유 시간이 짧다

대응

DMA 사용            바이트마다 CPU 가 개입하지 않는다
ISR 은 최소로        레지스터에서 꺼내 링 버퍼에 넣기만
인터럽트 우선순위 조정  통신은 대개 높게 둔다
흐름 제어            상대에게 잠깐 멈추라고 알린다 (RTS/CTS)

반드시 처리할 것

오버런 플래그를 읽고 지우지 않으면 이후 수신이 멈추는 주변장치가 있다. 그리고 데이터를 잃었다는 사실 자체를 상위로 알려야 한다 — 조용히 넘어가면 프로토콜 파서가 이상한 상태로 빠진다.

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — UART — 클럭 없이 약속으로 맞춘다