임베디드 시스템과 펌웨어

인터럽트 핸들러 안에서 피해야 할 것으로 가장 적절한 것은 무엇입니까?

  1. A플래그 변수에 1을 써서 메인 처리에 알리는 것
  2. B인터럽트 원인을 나타내는 비트를 지우는 것
  3. Cprintf로 긴 문자열을 출력하거나 무언가가 일어날 때까지 계속 기다리는 루프와 같은 시간이 오래 걸리는 처리
정답과 해설 보기

정답: C. printf로 긴 문자열을 출력하거나 무언가가 일어날 때까지 계속 기다리는 루프와 같은 시간이 오래 걸리는 처리

인터럽트 핸들러가 오래 동작하면 그동안 다른 인터럽트에 응답하지 못하고 메인 처리도 멈춥니다. printf는 출력이 끝날 때까지 시간이 걸리고 내부에서 인터럽트를 사용하기도 하므로 특히 위험합니다. 핸들러에서는 데이터를 받아 버퍼에 넣거나 플래그를 세우는 등 최소한의 처리만 하고, 무거운 처리는 메인 처리나 태스크에 맡깁니다. 원인 비트를 지우는 것도 잊어서는 안 됩니다.

이 분야 연습하기 분야로 돌아가기

임베디드 시스템과 펌웨어의 다른 문제

  1. 위의 프로그램을 최적화를 켜고 컴파일하면 타이머 인터럽트가 발생해도 led_on()이 호출되지 않는 경우가 있습니다. 원인과 대책의 조합으로 올바른 것은 무엇입니까?
  2. 8비트 마이크로컨트롤러에서 타이머 인터럽트가 32비트 변수 ticks를 1씩 증가시키고, 메인 처리가 ticks를 읽어 경과 시간을 구하고 있습니다. 드물게 크게 어긋난 값이 읽히는 원인으로 올바른 것은 무엇입니까?
  3. UART를 이용한 시리얼 통신의 특징으로 올바른 것은 무엇입니까?
  4. 115200 bps UART에서 데이터 8비트, 패리티 없음, 스톱 비트 1(8N1) 형식으로 보낼 때, 1초 동안 보낼 수 있는 바이트 수에 가장 가까운 것은 무엇입니까?
  5. UART의 송신 측과 수신 측의 보 레이트가 조금 어긋나면 문자가 깨지는 경우가 있습니다. 어긋남의 허용 범위가 대략 몇 % 정도로 제한되는 이유로 올바른 것은 무엇입니까?

이 분야의 비교