임베디드 용어 사전
GPIO·인터럽트

선점

실행 중인 것을 멈추고 더 급한 것을 먼저 처리하는 것. NVIC는 우선순위가 높은 인터럽트가 낮은 것을 선점하게 한다.

preemption. 중첩 인터럽트를 가능하게 하는 성질이다.

낮은 우선순위 ISR 실행 중
        ↓ 높은 우선순위 인터럽트 발생
        → 즉시 그쪽으로 넘어간다
        → 끝나면 원래 ISR 로 돌아와 이어서 실행

Cortex-M 은 이 전환을 하드웨어가 처리하므로 코드가 신경 쓸 것이 없다.

설계에서 정하는 것

급한 것을 높게    모터 전류 보호, 통신 수신 → 높은 우선순위
느린 것을 낮게    로그 전송, 화면 갱신 → 낮은 우선순위

우선순위를 다 같게 두면 선점이 일어나지 않는다 — 먼저 들어온 것이 끝나야 다음이 실행된다. 그러면 급한 인터럽트가 느린 것 뒤에 줄을 서게 된다.

대가

선점이 생기면 공유 데이터 문제가 커진다. 낮은 ISR 이 자료구조를 반쯤 고친 상태에서 높은 ISR 이 같은 자료구조를 보면 깨진 값을 읽는다.

임계 구역을 짧게 두거나
자료구조를 우선순위별로 분리하거나
락 없는 구조(단일 생산자 링 버퍼)를 쓴다

스택도 늘어난다

중첩되면 스택 사용이 겹쳐 쌓인다. 최악의 중첩 깊이를 가정해 스택을 잡아야 한다.

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — 인터럽트와 NVIC — 하던 일을 멈추고 달려가기