임베디드/임베디드 레시피

Interrupt, Polling

twoweeks-within 2025. 1. 10. 21:57

Interrupt : HW 변화 (외부 일시적 변화) > CPU 감지

   > 하던일을 멈춤 > ISR 실행 (미리약속된) > 응답

<>

Polling : HW변화를 지속적으로 읽어들여서 감지

   > 계속 상태를 읽는 루프 이용

  > do 

    { 

     status = check_status();

    }while (staus == NOT_DONE);

 

<> 이거를 interrupt 방식으로 구현하면 ( Done > 발생)

함수 2개 

void dsp_task()

> isr 받아서 wait 시그널에다가 DONE 날리기

+

void status_alarm_isr()

  > 인터럽트 발생시 signal send

 

>> 

Polling : CPU가 계속 while 에 묶여있어서 즉각적으로 처리

>> 함정) while 문 한바퀴를 다돌아야 그 상태가 변한걸 check 가능함

Interrupt : 다른일을 할수있음 but 해당 task 로 가려면 시간 차이가 생김 > Overhead

  >> 함정)  그 즉시 ISR 실행

 

융합) polling 중 interrupt 이용 ( Kernel service : Timer service)

   > GPIO ( General Purpose I/O) 

void pin_monitor_task()

  while(1)

    {

       set_timer(pin_monitor_task, WAKE_UP_SIG,50) // 50초ms 마다 wakeup 신호

         poll_gpio();

    }

}

 

void poll_gpio()

{

     if( read_gpio(1) == HIGH)

       do_gpio1_work();

}

 >>

50ms 신호마다 신호를 보내 작동 시키면서

+

interrupt ( HIGH) 가 되면 일을 하도록 함

'임베디드 > 임베디드 레시피' 카테고리의 다른 글

DPC ,APC, Bottom Half  (0) 2025.01.11
Queue , Inter Task Communication  (0) 2025.01.10
ATOMIC  (0) 2025.01.07
Clock Tick ISR  (0) 2025.01.07
선점형 kernel  (0) 2025.01.07