Software Timers

hyeony·2025년 9월 2일

RTOS

목록 보기
8/8

1. Introduction to Software Timers

가. Software Timer?

Software Timer는 특정 시점에 함수 실행을 예약하거나, 일정한 주기로 반복 실행을 예약하는 기능이다. Software Timer가 실행하는 함수는 Software Timer callback function라고 한다.

Software Timer는 FreeRTOS 커널에서 전적으로 구현 및 제어되며, HW 지원이 불필요하다. 즉, 마이크로컨트롤러에 내장된 Hardware Timer와는 무관하고, 커널에 의해 독립적으로 동작한다.

나. Software Timer callback function

Software Timer callback function은 일반적인 C 함수 형태로 작성되며, 특별한 점은 프로토타입 규칙뿐이다.

// 반환형: void
// 인자: Software Timer Handle 하나만 받음
void vTimerCallback(TimerHandle_t xTimer);

Callback Function은 시작부터 끝까지 실행되며, Task처럼 무한 루프를 포함해서는 아니 된다. 반드시 정상적으로 종료되어야 하며, 차단 상태에 들어가거나, 다른 리소스를 기다리는 동작을 해서는 아니 된다. 따라서 Callback Function은 매우 짧고 단순하게 유지해야 한다.

다. Software Timer의 주기

Software Timer주기란 Timer가 시작된 시점부터 Callback Function이 실행될 때까지 걸리는 시간을 의미한다.

Software Timer 다음과 같이 크게 두 가지 유형이 있다.

① One-shot Timer

  • 시작되면 한 번만 Callback Function을 실행
  • 만약 다시 사용하려면 수동으로 재시작 要

② Auto-reload Timer

  • 시작되면 만료될 때마다 자동으로 재시작
  • 그에 따라 주기적으로 Callback Function 실행

라. Software Timer의 상태

Software Timer대기(dormant) 상태실행(running) 상태 중 하나에 있을 수 있다.

① 대기 상태

  • Timer가 존재하고 Handle로 참조할 수 있지만 실행 중은 아님
  • Callback Function이 실행되지 않음

② 실행 상태

  • Timer가 주기에 따라 Callback Function을 실행
  • Timer가 실행 상태가 되려면 xTimerStart, xTimerReset, xTimerChangePeriod API를 사용해야 함

마. State Transition

1) One-shot Timer

One-shot Timer는 만료되면 자동으로 대기 상태로 전환된다. 즉, Auto-reload Timer와 달리, 스스로 반복 실행하지 아니한다.

마찬가지로 xTimerStop을 사용하여 수동으로 대기 상태로 만들 수도 있으며, 시작/리셋/주기 변경을 통해 다시 실행 상태로 전환할 수 있다.

2) Auto-reload Timer

Auto-reload Timer는 만료되더라도 실행 상태를 유지하며 계속 주기적으로 Callback Function을 실행한다. 대기 상태로 전환하려면 xTimerStop API를 호출해야 한다.

즉, 처음 생성 시에는 대기 상태에 있으며, 이후 시작/리셋/주기 변경을 통해 실행 상태로 전환된다.

<참고 자료>
https://www.udemy.com/course/arduino-freertos/

profile
Chung-Ang Univ. EEE.

0개의 댓글