임베디드 시스템과 펌웨어

8비트 마이크로컨트롤러에서 타이머 인터럽트가 32비트 변수 ticks를 1씩 증가시키고, 메인 처리가 ticks를 읽어 경과 시간을 구하고 있습니다. 드물게 크게 어긋난 값이 읽히는 원인으로 올바른 것은 무엇입니까?

  1. A8비트 마이크로컨트롤러에서는 32비트 변수를 사용할 수 없기 때문에
  2. B타이머 인터럽트의 주기가 매번 무작위로 바뀌기 때문에
  3. C32비트 읽기가 4번으로 나뉘어 그 도중에 인터럽트가 들어와 일부 바이트만 새로운 값이 되는 경우가 있기 때문에
정답과 해설 보기

정답: C. 32비트 읽기가 4번으로 나뉘어 그 도중에 인터럽트가 들어와 일부 바이트만 새로운 값이 되는 경우가 있기 때문에

8비트 마이크로컨트롤러는 한 번에 1바이트밖에 읽지 못하므로 32비트 값은 4번에 나누어 읽습니다. 예를 들어 0x000000FF에서 0x00000100으로 바뀌는 순간에 하위 바이트를 읽은 뒤 인터럽트가 들어오면, 오래된 하위 바이트(0xFF)와 새로운 상위 바이트(0x01)가 조합되어 0x000001FF와 같은 값이 됩니다. 읽는 동안만 인터럽트를 금지하거나, 두 번 읽어 같은 값이 될 때까지 다시 읽는 방법으로 막습니다.

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

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

  1. UART를 이용한 시리얼 통신의 특징으로 올바른 것은 무엇입니까?
  2. 115200 bps UART에서 데이터 8비트, 패리티 없음, 스톱 비트 1(8N1) 형식으로 보낼 때, 1초 동안 보낼 수 있는 바이트 수에 가장 가까운 것은 무엇입니까?
  3. UART의 송신 측과 수신 측의 보 레이트가 조금 어긋나면 문자가 깨지는 경우가 있습니다. 어긋남의 허용 범위가 대략 몇 % 정도로 제한되는 이유로 올바른 것은 무엇입니까?
  4. SPI 통신의 특징으로 올바른 것은 무엇입니까?
  5. SPI에서 일반적으로 사용되는 4개 신호의 조합으로 올바른 것은 무엇입니까?

이 분야의 비교