임베디드 시스템과 펌웨어

1 ms마다 일정한 제어 계산을 하고 싶습니다. OS를 사용하지 않는 마이크로컨트롤러에서의 구현으로 가장 적절한 것은 무엇입니까?

  1. A1 ms마다의 타이머 인터럽트에서 플래그를 세우고, 메인 루프가 플래그를 보고 계산을 수행한다
  2. B메인 루프 안에 대략 1 ms 걸릴 것 같은 빈 루프를 넣어 간격을 만든다
  3. C계산이 끝날 때마다 마이크로컨트롤러를 재시작한다
정답과 해설 보기

정답: A. 1 ms마다의 타이머 인터럽트에서 플래그를 세우고, 메인 루프가 플래그를 보고 계산을 수행한다

빈 루프로 시간을 만들면 다른 처리에 걸리는 시간이나 컴파일러의 최적화에 따라 간격이 변해 정확하지 않습니다. 하드웨어 타이머는 처리와 관계없이 정확하게 세므로, 1 ms마다의 인터럽트를 기준으로 하면 일정한 간격을 유지할 수 있습니다. 계산이 짧으면 인터럽트 안에서 직접 할 수도 있지만, 긴 경우에는 플래그로 알리고 메인 루프에서 수행하면 다른 인터럽트를 방해하지 않습니다.

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

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

  1. 마이크로컨트롤러의 브라운아웃 검출(BOD, 브라운아웃 리셋)의 역할로 올바른 것은 무엇입니까?
  2. 인터럽트에 우선순위를 줄 수 있는 마이크로컨트롤러에서, 우선순위가 낮은 인터럽트의 핸들러를 실행 중에 우선순위가 높은 인터럽트가 발생했습니다. 일반적으로 어떻게 됩니까? (인터럽트 중첩을 허용하는 설정으로 가정)
  3. C 언어에서 레지스터 reg의 비트 3만 1로 만들고 나머지 비트는 바꾸지 않는 올바른 표기는 무엇입니까?
  4. C 언어에서 레지스터 reg의 비트 3만 0으로 만들고 나머지 비트는 바꾸지 않는 올바른 표기는 무엇입니까?
  5. LED를 연결한 출력 핀의 비트를 실행할 때마다 점등과 소등으로 번갈아 바꾸고 싶습니다. 올바른 C 언어 표기는 무엇입니까?

이 분야의 비교