임베디드 시스템과 펌웨어

인터럽트에 우선순위를 줄 수 있는 마이크로컨트롤러에서, 우선순위가 낮은 인터럽트의 핸들러를 실행 중에 우선순위가 높은 인터럽트가 발생했습니다. 일반적으로 어떻게 됩니까? (인터럽트 중첩을 허용하는 설정으로 가정)

  1. A낮은 핸들러를 중단하고 높은 핸들러를 실행한 뒤, 끝나면 낮은 핸들러의 이어지는 부분으로 돌아간다
  2. B낮은 핸들러가 끝날 때까지 높은 인터럽트는 버려진다
  3. C두 핸들러가 동시에 같은 CPU에서 병렬로 실행된다
정답과 해설 보기

정답: A. 낮은 핸들러를 중단하고 높은 핸들러를 실행한 뒤, 끝나면 낮은 핸들러의 이어지는 부분으로 돌아간다

인터럽트에 우선순위를 주면 급한 인터럽트는 다른 핸들러를 실행하는 도중에도 끼어들어 처리됩니다. 예를 들어 모터의 과전류 검출을 높은 우선순위로, 통신 수신을 낮은 우선순위로 해 두면 수신 처리 중에도 과전류에 즉시 대응할 수 있습니다. Arm Cortex-M의 NVIC 등이 이 구조를 가지고 있습니다. 같거나 낮은 우선순위의 인터럽트는 현재 핸들러가 끝날 때까지 기다리게 됩니다.

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

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

  1. C 언어에서 레지스터 reg의 비트 3만 1로 만들고 나머지 비트는 바꾸지 않는 올바른 표기는 무엇입니까?
  2. C 언어에서 레지스터 reg의 비트 3만 0으로 만들고 나머지 비트는 바꾸지 않는 올바른 표기는 무엇입니까?
  3. LED를 연결한 출력 핀의 비트를 실행할 때마다 점등과 소등으로 번갈아 바꾸고 싶습니다. 올바른 C 언어 표기는 무엇입니까?
  4. 입력용 레지스터 in의 비트 5가 1인지 검사하는 올바른 C 언어 조건은 무엇입니까?
  5. 위의 코드는 레지스터 reg의 여러 비트로 이루어진 설정 필드를 바꿔 쓰고 있습니다. 무엇을 하고 있습니까?

이 분야의 비교