페이지 선택
Generic selectors
Exact matches only
Search in title
Search in content
Search in pages

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 시리얼포트로 동작을 확인한 결과는 아래와 같다.

 

 

종료 부분

 

 

 

 

Adsense

EMW3070

Viewed Page List