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 |