임베디드 시스템과 펌웨어
인터럽트에 우선순위를 줄 수 있는 마이크로컨트롤러에서, 우선순위가 낮은 인터럽트의 핸들러를 실행 중에 우선순위가 높은 인터럽트가 발생했습니다. 일반적으로 어떻게 됩니까? (인터럽트 중첩을 허용하는 설정으로 가정)
- A낮은 핸들러를 중단하고 높은 핸들러를 실행한 뒤, 끝나면 낮은 핸들러의 이어지는 부분으로 돌아간다
- B낮은 핸들러가 끝날 때까지 높은 인터럽트는 버려진다
- C두 핸들러가 동시에 같은 CPU에서 병렬로 실행된다
정답과 해설 보기
정답: A. 낮은 핸들러를 중단하고 높은 핸들러를 실행한 뒤, 끝나면 낮은 핸들러의 이어지는 부분으로 돌아간다
인터럽트에 우선순위를 주면 급한 인터럽트는 다른 핸들러를 실행하는 도중에도 끼어들어 처리됩니다. 예를 들어 모터의 과전류 검출을 높은 우선순위로, 통신 수신을 낮은 우선순위로 해 두면 수신 처리 중에도 과전류에 즉시 대응할 수 있습니다. Arm Cortex-M의 NVIC 등이 이 구조를 가지고 있습니다. 같거나 낮은 우선순위의 인터럽트는 현재 핸들러가 끝날 때까지 기다리게 됩니다.