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 )
{
}
timer_demo |
100ms 주기의 Auto Reload 타이머를 생성 → 타이머는 생성 만으로 동작하지 않으며 따로 Start를 시켜줘야 한다. 100ms One Time 타이머 생성 → 타이머는 생성 만으로 동작하지 않으며 따로 Start를 시켜줘야 한다. Callback 함수 정의 및 등록 → Timer가 정해진 시간에 이르렀을 때, 즉 타이머 이벤트(event)가 발행하였을 때 수행할 Callback 함수를 등록 |
}
main |
int main(void)
3. Timer 데모 동작확인
♦ Timer 데모를 컴파일하고 Flash에 다운로드→ mxos make os@emw3080 download jtag=jlink
♦ EMW3080을 Reset하고 DBG 시리얼포트로 동작을 확인한 결과는 아래와 같다.
종료 부분