ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Keyword] __interrupt
    Software/C 2024. 8. 21. 09:33
    728x90
    Interrupt

    Interrupt 키워드는 함수 앞에 붙여 쓰는 키워드로 해당 함수가 인터럽트 함수로 처리되는 것을 의미한다.

    Interrupt란 하드웨어 단에서 일어나는 이벤트 콜이라고 볼 수 있다. 폴링(Polling)이 루프를 돌며 상태를 체크해서 이벤트를 발생시키는 루틴이라면, 인터럽트는 외부에서 어떤 상황이 발생했을 때 단발성으로 이벤트를 발생시키기 때문에 정 반대의 개념이라고 볼 수 있다. 폴링의 대표적인 예가 와치독 타이머라면, 인터럽트는 대부분의 예외상황(exceptions)이 모두 인터럽트라고 볼 수 있다. 대부분의 인터럽트가 외부에서 CPU 코어에 전달되지만, CPU 내부에서 발생되는 인터럽트루틴도 존재한다.

     

     

     

     

    ISR (Interrupt Service Routine)

    인터럽트를 수행하는 함수를 의미한다.

     

     

     

     

    인터럽트 처리순서
    1. 인터럽트가 발생하면 CPU는 비트마스크를 통해 해당 인터럽트를 처리할지 말지를 결정한다.
    2. 인터럽트 벡터를 읽어 해당 ISR(Interrupt Service Routine)으로 이동한다.
    3. 하고 있던 작업 레지스터값들을 스택에 대피시켜 놓고 인터럽트를 진행한다.
    4. 인터럽트가 수행되면 대피시켜 놓은 값을 불러온다.
    5. ISR의 IRET 명령어에 의해 이전 실행 위치로 되돌아간다.

     

     

     

     

     

     

     

    728x90

    'Software > C' 카테고리의 다른 글

    [MISRA C 2012] 정적 분석 팁 ( 계속 업데이트 )  (0) 2024.08.29
    전처리기 #if , #ifndef , #define, #endif  (0) 2024.08.20
    [Keyword] extern , static  (0) 2024.08.20