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

O/S는 어떤 시간에 인터럽트를 방생시키거나, 태스크 스케쥴링 등을 위해 적어도 한 개의 타이머를 가지고 있으며,

MXOS 타이머 API는 시스템 타이머를 초기화, 시작, 종료, 소멸시킬 수 있는 수단을 제공하고 있다. → ⊕ MXOS API에서 제공하는 Timer의 시간 단위: ms.

 

타이머를 동작시키는 방식은 크게 다음 두 가지로 구분된다.

 

Auto Reload 방식

Timer가 1회 동작 후 다시 Timer의 설정 값을 스스로 Reload하면서 주기적으로 반복동작

 

One Time/Shot 방식

설정 값까지 카운트 되었을 때 1회만 정해진 동작을 수행

 

 

 

1. Timer 데모 구현내용

코드위치 demos/os/os.c

 

⊕ 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);
    app_log(“delete all timer”);
    mos_timer_delete(id1);
    mos_timer_delete(id2);
    app_log(“timer demo end”);
    mos_sleep(1);

}

 

 
 
 
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