DPC : Deferred Procedure Call : APC 를 직접 처리
> Task로 구성
APC : Asynchronous Procedure Call : 지금처리 x 나중에 task level로 처리
> API 로구성
ISR 이 너무길어질때 > task 를 지금처리 or 나중처리 로 나눔
: Linux > Bottom Half = DPC + APC
> 콜백 함수 clk_register (key_polling,100) 같은게 여러개일때
> task level 에서 처리할 수있게함 > Queue 로 보냄
>>
ex)
ISR 끝쪽에
void Key_polling_cb()
{
queue_apc(key_polling);
send_signal( DPC_WORK_SIG);
> 중요한일 ( key_polling : 신호올때까지 기다리는 함수) > queue 에넣고
}
ISR 끝난뒤 scheduling 이 될때
void DPC_task()
{
while(1)
{
Interrupt_Lock(); // 인터럽트 안걸리게
while( (queue_get())() );
// queue_get() : A
// ( A ) ()
// > queue 가 비워질때까지 get
Interrupt_free();
}
}
+ DPC_task 의 Priority 는 높은쪽에 속해야 매우좋음
'임베디드 > 임베디드 레시피' 카테고리의 다른 글
Bootup 중 kernel로 진입 - main() (0) | 2025.01.11 |
---|---|
Watch dog (0) | 2025.01.11 |
Queue , Inter Task Communication (0) | 2025.01.10 |
Interrupt, Polling (0) | 2025.01.10 |
ATOMIC (0) | 2025.01.07 |