Callback 함수
어떤 Event가 발생하였을 때 호출될 함수를 시스템에 등록해 놓고, 이 함수를 코드 상에서 명시적으로 호출하지 않더라도 해당 이벤트가 발생하면 호출되도록 하는 방식.
아래 예제에서는 Timer를 생성할 때 Callback함수를 등록하였으며, 타이머 이벤트가 발생되었을 때 Background로 이 Callback 함수가 호출될 것이다.
_timer_cb |
Timer 이벤트가 발생하였을 때 백그라운드에서 호출되며, 실행 내용은 메시지를 출력해 주고 있다. |
static void _timer_cb( void* arg )
{
char *name =(char*)arg;
app_log(“timer %s CB”, name);
}
timer_demo |
100ms 주기의 Auto Reload 타이머를 생성 → 타이머는 생성 만으로 동작하지 않으며 따로 Start를 시켜줘야 한다. 100ms One Time 타이머 생성 → 타이머는 생성 만으로 동작하지 않으며 따로 Start를 시켜줘야 한다. Callback 함수 정의 및 등록 → Timer가 정해진 시간에 이르렀을 때, 즉 타이머 이벤트(event)가 발행하였을 때 수행할 Callback 함수를 등록 |
static void timer_demo(void)
{
mos_timer_id_t id1, id2;
app_log(“timer demo start”);
id1 = mos_timer_new(100, _timer_cb, true, “auto reload timer”);
id2 = mos_timer_new(100, _timer_cb, false, “once timer”);
mos_timer_start(id1);
mos_timer_start(id2);
mos_sleep(10); //현재의 스레드를 10초 동안 Suspend(Sleep) 시킴
app_log(“delete all timer”);
mos_timer_delete(id1);
mos_timer_delete(id2);
app_log(“timer demo end”);
mos_sleep(1); //현재의 스레드를 1초 동안 Suspend(Sleep) 시킴
}
main |
int main(void)
{
//thread_demo();
timer_demo();
//sem_demo();
//queue_demo(1);
//queue_demo(2);
//queue_demo(3);
//queue_demo(4);
return 0;
}
3. Timer 데모 동작확인
♦ Timer 데모를 컴파일하고 Flash에 다운로드→ mxos make os@emw3080 download jtag=jlink
♦ EMW3080을 Reset하고 DBG 시리얼포트로 동작을 확인한 결과는 아래와 같다.
종료 부분