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

DPC ,APC, Bottom Half

twoweeks-within 2025. 1. 11. 13:41

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