FreeRTOS 시리즈
FreeRTOS Documentation - FreeRTOS™
이 문서에서 제공하는 PDF를 읽고 정리한 글입니다.
생성 일 : 2026-06-24 최종 수정일 : 2026-06-23
RTOS를 쓰는 이유는 다음과 같다.
-
태스크 우선순위를 설정한다면 애플리케이션(또는 작업)이 데드라인 도달 전에 끝내는 걸 보장할 수 있다.
-
시간 관련 API를 제공하여 애플리케이션이 직접 실행 타이밍을 다루는 코드를 구현하지 않게 된다.
애플리케이션의 실행 시점은 RTOS 커널이 결정한다. 따라서 기능이 추가될 때 복잡한 타이밍 관리 코드를 작성하지 않으므로 코드 구조를 비교적 단순하게 만들 수 있다.
-
태스크의 목적을 잘 설정한다면 기능의 독립적인 모듈화가 가능하다.
-
태스크 단위의 인터페이스를 사용한다면 팀 단위 개발에 용이하다.
-
모듈화된 태스크는 테스트하기 쉽다.
-
모듈화된 태스크는 코드 재사용이 쉽다.
-
RTOS는 이벤트 기반으로 실행되므로, 일어나지 않을 이벤트에 대해 무한정 기다리는 코드가 실행되지 않는다.
실행되지 말아야할 태스크를 결정하는 것은 매 틱마다 일어나는 틱 인터럽트 내에서 결정하므로 약간의 오버헤드는 존재한다. 그러나 베어메탈에서는 의미없이 기다리느라 낭비되는 시간이 있지만, RTOS에는 그런 작업을 하는 태스크는 스케줄러에 의해 blocked 상태로 보내 의미있는 작업을 하도록 만드므로 전체적으로 볼 때 효율적이라 할 수 있다.
-
Idle일 때, 즉 모든 태스크가 작업을 하지 않을 때 저전력 모드로 동작시키는 태스크가 있어 효율적인 전력 사용이 가능하다.
-
긴 작업을 처리하는 ISR 때문에 지연되는 시간을 줄일 수 있다.
베어메탈에 비해 가벼운 ISR를 구현하되, 실제 처리는 태스크로 위임하는 방식을 사용한다. 이러면 ISR에 의해 처리되는 시간을 줄임으로 스케줄링이 방해를 매우 적게 받는다. 반대로 ISR이 오래 걸리는 작업을 처리한다면 우선순위가 높은 작업이 데드라인을 맞추지 못한다. 따라서 이 방식을 사용함으로 ISR 내에서 오래 걸리는 작업을 우선순위 스케줄링을 통해 효율적으로 처리할 수 있다.
-
중요도가 다른 여러 작업들을 관리하기 편하다.