
Software Timer는 특정 시점에 함수 실행을 예약하거나, 일정한 주기로 반복 실행을 예약하는 기능이다. Software Timer가 실행하는 함수는 Software Timer callback function라고 한다.
Software Timer는 FreeRTOS 커널에서 전적으로 구현 및 제어되며, HW 지원이 불필요하다. 즉, 마이크로컨트롤러에 내장된 Hardware Timer와는 무관하고, 커널에 의해 독립적으로 동작한다.
Software Timer callback function은 일반적인 C 함수 형태로 작성되며, 특별한 점은 프로토타입 규칙뿐이다.
// 반환형: void
// 인자: Software Timer Handle 하나만 받음
void vTimerCallback(TimerHandle_t xTimer);
Callback Function은 시작부터 끝까지 실행되며, Task처럼 무한 루프를 포함해서는 아니 된다. 반드시 정상적으로 종료되어야 하며, 차단 상태에 들어가거나, 다른 리소스를 기다리는 동작을 해서는 아니 된다. 따라서 Callback Function은 매우 짧고 단순하게 유지해야 한다.
Software Timer의 주기란 Timer가 시작된 시점부터 Callback Function이 실행될 때까지 걸리는 시간을 의미한다.
Software Timer 다음과 같이 크게 두 가지 유형이 있다.
① One-shot Timer
② Auto-reload Timer
Software Timer는 대기(dormant) 상태와 실행(running) 상태 중 하나에 있을 수 있다.
① 대기 상태
② 실행 상태
xTimerStart, xTimerReset, xTimerChangePeriod API를 사용해야 함One-shot Timer는 만료되면 자동으로 대기 상태로 전환된다. 즉, Auto-reload Timer와 달리, 스스로 반복 실행하지 아니한다.
마찬가지로 xTimerStop을 사용하여 수동으로 대기 상태로 만들 수도 있으며, 시작/리셋/주기 변경을 통해 다시 실행 상태로 전환할 수 있다.
Auto-reload Timer는 만료되더라도 실행 상태를 유지하며 계속 주기적으로 Callback Function을 실행한다. 대기 상태로 전환하려면 xTimerStop API를 호출해야 한다.
즉, 처음 생성 시에는 대기 상태에 있으며, 이후 시작/리셋/주기 변경을 통해 실행 상태로 전환된다.