RTOS 기반 설계를 위한 코드 및 데이터 크기
이 글은 RTOS 전문가 Jean J. Labrosse가 작성했습니다.
RTOS는 개발자가 응용 프로그램에 추가하는 일련의 서비스(즉, 함수)로 구성됩니다. 이러한 서비스는 플래시(코드 공간)와 RAM(데이터 공간)을 모두 사용합니다.
RTOS가 사용하는 코드 공간의 실제 양은 일반적으로 약 8KB에서 24KB로 매우 작습니다. 코드 공간은 오늘날의 32비트 CPU 및 MCU에서 일반적으로 문제가 되지 않습니다. 반면에 RTOS 기반 응용 프로그램에서는 단일 스레드 응용 프로그램(즉, 슈퍼 루프)보다 더 많은 RAM이 필요합니다.
RTOS는 내부 변수를 사용하여 임무를 수행합니다. 일반적으로 이 범위는 수백 바이트에서 최대 킬로바이트에 이릅니다. 응용 프로그램의 각 태스크에는 RTOS가 각 태스크의 상태를 추적하는 데 사용하는 TCB(태스크 제어 블록)라는 데이터 구조도 필요합니다. TCB는 RTOS가 제공하는 함수 및 RTOS가 각 태스크에 대한 통계를 수집하는지 여부에 따라 50~250바이트의 RAM을 사용할 수 있습니다.
RTOS 기반 응용 프로그램에서 RAM을 가장 많이 사용하는 것은 아마도 각 태스크에 필요한 스택이며, 그 크기는 태스크 요구 사항(예: 함수 호출 중첩, 함수에 전달된 인수, 로컬 변수 등)에 따라 다릅니다. 스택 오버플로를 피하기 위해 개발자는 스택 공간을 많이 할당하되 RAM 낭비를 막기 위해 과도하게 할당하지 않아야 합니다. IAR Embedded Workbench의 링커에는 각 태스크에 필요한 스택 공간을 결정하는 데 도움이 되는 정돈된 함수가 있습니다. 링커 구성에서 확인란을 선택하고(아래 스크린샷 참조), 코드를 빌드하고, 링크 맵(.MAP 파일)을 검사하여 응용 프로그램의 각 함수에 대한 호출 스택 깊이(바이트 단위)를 표시할 수 있습니다. 그런 다음 해당 숫자에 하나 또는 두 개의 값을 추가해야 하므로 각 태스크에서 태스크의 호출 스택 크기를 기록하기만 하면 됩니다.
각 태스크의 스택은 해당 태스크의 컨텍스트를 보관하기에 충분한 스토리지를 보유해야 합니다. 이것은 CPU 레지스터의 복사본과 FPU 레지스터(FPU가 사용되는 경우)로 구성됩니다. 주어진 태스크에 필요한 총 태스크 스택 크기(바이트)를 결정하는 데 아래의 간단한 방정식이 사용되며 약간의 여유 공간을 위해 33%를 추가합니다. 실제로, 대부분의 임베디드 응용 프로그램에서는 런타임 스택 사용량을 70% 이하로 유지하는 것이 바람직합니다. 요구 사항에 따라 확실히 더 보수적으로 정할 수도 있습니다.
예를 들어 응용 프로그램에서 태스크의 호출 스택 중 하나가 256바이트이고 Cortex-M4를 사용하고 있다고 가정해 봅시다. 이 경우 CPU 컨텍스트는 64바이트이고 FPU는 132바이트입니다. 따라서 위의 방정식은 다음과 같은 태스크 스택 크기를 산출합니다:
uC/OS-III 기반 응용 프로그램의 경우 아래와 같이 IAR Embedded Workbench의 C-SPY Debugger에서 제공되는 커널 인식 함수를 검사하여 런타임에서 실제 스택 사용량을 확인할 수 있습니다.
마지막으로 태스크들은 리소스를 공유하거나 서로 통신할 수 있으며, RTOS 개체라고 하는 다른 데이터 구조를 통해 그렇게 할 수 있습니다. RTOS 개체들은 작으며, 일반적으로 각각 16~64바이트를 사용합니다.
예를 들어, 응용 프로그램에 10개의 태스크가 있고, 하나의 태스크 스택이 평균적으로 1킬로바이트라고 가정해 봅시다 (일반적인 태스크는 덜 필요함). 응용 프로그램에 5개의 RTOS 개체(각각 64바이트)가 있는 경우 필요한 RAM은 다음과 같이 계산됩니다:
or:
그러나 이 RAM은 오로지 RTOS에 필요한 것입니다. 여기에는 응용 프로그램 코드 자체에 필요한 RAM의 양이 포함되지 않습니다.
저자 소개
본 기사는 RTOS 개발 애플리케이션에 관한 시리즈의 일부입니다.
Jean Labrose는 높은 인지도를 가진 uC/OS-II와 uC/OS-III 커널의 저자이자 Micrium의 설립자로, 임베디드 소프트웨어의 uC/라인의 발전에 적극적으로 관여하고 있습니다.
Jean은 풍부한 경험과 임베디드 시스템 시장에 대한 깊은 이해를 바탕으로 Weston Embedded Solutions의 수석 조언자 및 컨설턴트로 재직하고 있으며, 현재 RTOS 제품의 향후 보다 발전된 제안을 마련하는데 기여하고 있습니다. Weston Embedded Solutions는 Micrium 코드베이스에서 파생된 매우 안정적인 Cesium RTOS 제품군의 지원 및 개발을 전문으로 합니다.
Jean.Labrosse@Weston-Embedded.com.