정해진 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 |