FreeRTOS는 Real-Time Operating System(RTOS)으로, 임베디드 시스템에서 실시간 작업을 처리하기 위해 설계되었다. 작고 경량화된 커널 구조로 인해 메모리가 소형 시스템에서도 동작하며, 태스크 관리, 시간 관리, 자원 공유 등의 기능을 제공합니다.
FreeRTOS의 기본 개념
(1) 태스크(Task)
- 정의 : FreeRTOS에서 실행 단위는 태스크(Task)이다. 각 태스크는 독립적인 실행 흐름을 가지며, 이를 통해 병렬 실행처럼 보이는 동작을 구현할 수 있다.
- 구조 : 각 태스크는 사용자 정의 함수로 작성되며, FreeRTOS에 의해 스케줄링된다.
- 우선순위 : 태스크는 생성 시 우선순위를 설정하며, 스케줄러가 이를 기반으로 실행 순서를 결정한다.
(2) 스케줄러(Scheduler)
- 역할 : FreeRTOS의 핵심은 태스크를 관리하고 실행 순서를 결정하는 스케줄러이다.
- 방식 :
- 선점형 스케줄링 : 높은 우선순위의 태스크가 항상 실행된다.
- 비선점형 스케줄링 : 실행 중인 태스크가 완료될 때까지 CPU를 양보하지 않는다.
- Tick 기반 : FreeRTOS는 일정 주기(`configTICK_RATE_HZ`)로 Tick 인터럽트를 발생시키며, 스케줄러는 이 Tick 이벤트를 기반으로 실행될 태스크를 결정한다.
(3) 실시간성
- RTOS는 정확한 시간 관리가 핵심이다. FreeRTOS는 정밀한 시간 제어를 위해 SysTick 타이머와 소프트웨어 타이머를 제공한다.
FreeRTOS의 구성 요소
(1) 핵심 소스 코드
- FreeRTOS는 커널 코드를 포함하며, 주로 다음 파일로 구성된다.
- `tasks.c` : 태스크 관리
- `queue.c` : 큐와 같은 통신 메커니즘 제공
- `list.c` : 데이터 구조와 리스트 관리
- `timers.c` : 소프트웨어 타이머 관리
(2) 포팅 레이어
- 하드웨어와 RTOS를 연결하는 역할을 한다.
- 주요 포팅 파일 :
- `port.c` : 하드웨어 종속적인 코드 구현
- `portmacro.h` : 포팅 매크로 정의
- Cortex-M MCU에서는 CMSIS 표준을 통해 FreeRTOS를 쉽게 포팅할 수 있다.
(3) 설정 파일(FreeRTOSConfig.h)
- 프로젝트 환경에 맞게 FreeRTOS의 동작 방식을 정의한다.
- 주요 설정 :
- `configCPU_CLOCK_HZ` : MCU의 CPU 클럭 속도
- `configTiCK_RATE_HZ` : Tick 주기 (초당 Tick 수)
- `configMAX_PRIORITIES` : 최대 태스크 우선순위 개수
- `configTOTAL_HEAP_SIZE` : FreeRTOS가 사용하는 힙 크기
(4) SysTick 타이머
- FreeRTOS는 SysTick 타이머를 사용하여 주기적인 Tick 인터럽트를 발생시킨다.
- Tick은 스케줄러와 소프트웨어 타이머의 기본 주기가 된다.
FreeRTOS의 주요 기능
(1) 태스크 관리
- 다중 태스크를 생성하고 관리할 수 있다.
- 태스크는 `xTaskCreate()` 를 통해 생성되며, 스케줄러가 실행 순서를 제어한다.
(2) 동기화 및 통신
- 큐(Queue) : FIFO 방식으로 데이터를 교환
- 세마포어(Semaphore) : 태스크 간 자원 접근 제어
- 뮤텍스(Mutex) : 세마포어와 비슷하지만 우선순위 역전을 방지
- 이벤트 그룹(Event Group) : 다수의 이벤트를 태스크와 동기화
(3) 소프트웨어 타이머
- 주기적 작업을 실행하거나, 일정 시간 후 작업을 예약할 수 있다.
(4) 메모리 관리
- FreeRTOS는 5가지 메모리 관리 방식(힙 관리자)을 제공한다.
- 가장 일반적으로 사용되는 방식은 `heap_4.c`로, 동적 메모리 할당과 해제를 지원한다.
(5) 인터럽트 관리
- FreeRTOS는 낮은 우선순위의 태스크와 높은 우선순위의 인터럽트를 효율적으로 처리한다.
- 인터럽트에서 `xTaskNotifyFromISR()`를 사용하여 태스크에 이벤트를 전달할 수 있다.
FreeRTOS의 장점
(1) 실시간 성능
- 정확한 시간 기반 작업 처리
- 우선순위 기반 스케줄링으로 긴급 작업 우선 처리 가능
(2) 가벼운 메모리 요구사항
- FreeRTOS는 몇 kB 수준의 메모리에서도 동작할 수 있어 소형 임베디드 시스템에 적합
(3) 유연성과 확장성
- 필요한 기능만 활성화하여 메모리와 CPU 자원을 최적화 가능
- 소형 프로젝트부터 대규모 IoT 시스템까지 적용 가능
(4) 다양한 플랫폼 지원
- Cortex-M, AVR, PIC, RISC-V 등 여러 아키텍쳐 지원
- 높은 이식성으로 거의 모든 MCU에서 동작 가능
(5) 활발한 커뮤니티와 지원
- 전 세계적으로 널리 사용되며 풍부한 문서와 예제를 제공
728x90
'CS' 카테고리의 다른 글
ELF(Executable and Linkable Format)이란? (0) | 2024.12.18 |
---|---|
Keil μVision5 (2) | 2024.11.08 |
OSAL(Operating System Abstraction Layer)란? (0) | 2024.11.05 |
프리패칭(Prefetching)이란? (0) | 2024.11.04 |
부동소수점에 대해서 (0) | 2024.11.01 |