임베디드 시스템과 펌웨어
1 ms마다 일정한 제어 계산을 하고 싶습니다. OS를 사용하지 않는 마이크로컨트롤러에서의 구현으로 가장 적절한 것은 무엇입니까?
- A1 ms마다의 타이머 인터럽트에서 플래그를 세우고, 메인 루프가 플래그를 보고 계산을 수행한다
- B메인 루프 안에 대략 1 ms 걸릴 것 같은 빈 루프를 넣어 간격을 만든다
- C계산이 끝날 때마다 마이크로컨트롤러를 재시작한다
정답과 해설 보기
정답: A. 1 ms마다의 타이머 인터럽트에서 플래그를 세우고, 메인 루프가 플래그를 보고 계산을 수행한다
빈 루프로 시간을 만들면 다른 처리에 걸리는 시간이나 컴파일러의 최적화에 따라 간격이 변해 정확하지 않습니다. 하드웨어 타이머는 처리와 관계없이 정확하게 세므로, 1 ms마다의 인터럽트를 기준으로 하면 일정한 간격을 유지할 수 있습니다. 계산이 짧으면 인터럽트 안에서 직접 할 수도 있지만, 긴 경우에는 플래그로 알리고 메인 루프에서 수행하면 다른 인터럽트를 방해하지 않습니다.