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

Clock Tick ISR

twoweeks-within 2025. 1. 7. 14:28

정해진 Tick 마다 ISR 이 걸러줌

 > 흘러간 시간 파악

   > 얼만큼의 시간이 흐르면 특정동작하도록 할 수 있음

: Kernel service  > Timer service

 

Call back Function : 호출될 시간을 Parameter 로 줌

 

clk_regiseter(key_polling, 100); 

> 100ms 후에 key_polling 호출 

 

// 일반적으로 5ms 마다 불림

Clock Tick ISR

1. clk_regiseter 된 Call back Function 들의 시간을 5ms 씩 빼줌

2. 5ms 씩 빼다가 0이된 놈들 ( Expire )  > Call back Function 실행

3. Linkedlist 

  Call back 등록  > list : 얼마남지 않은 순서로 등록

    > Clock tick ISR 이 list 를 처음부터 끝까지 따라가며 5ms 씩 빼줌

      > 빼려고 했는데? Expire 된 Call back Function 을 만나면 하나씩 실행시켜줌

        > 실행이 되면 List 에서 제거

 

set_timer (dsp_task, CALC_SIG, 10ms )

 > 10ms 후에 CALC_SIG 라는 signal 을 dsp_task 에게 넘겨줌

   > 일반적 timer 라면 실행 후 꺼지지만  <>

       > 일정 시간 후에 일을 또 시킬 수 있음

 

Task_sleep : 일을 하다가 잠시 쉴때도 timer 사용

void Task_Sleep(ms)

{

  set_timer( 호출한 자기자신, Wake_up_sig, ms);  // 2. 일정ms 이후에 wake up!

 wait_signal(WAKE_UP_SIG);   // 1. wait 시켜놓고

}

 

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

Interrupt, Polling  (0) 2025.01.10
ATOMIC  (0) 2025.01.07
선점형 kernel  (0) 2025.01.07
ISR구현  (0) 2025.01.07
TCB 구조  (0) 2024.12.18