FreeRTOS

FreeRTOS 개발 환경 설정 및 구현 방법

임베디드 친구 2025. 1. 10. 08:37
반응형

소개

CMSIS-RTOS v1은 ARM Cortex-M 프로세서를 대상으로 하는 표준 RTOS 인터페이스입니다. 이 글에서는 STM32CubeIDE 또는 Keil IDE를 사용하여 CMSIS-RTOS v1 기반 FreeRTOS를 설정하고 구현하는 방법을 설명합니다. 다음은 이 글의 주요 내용입니다:

  • 개발 환경 설정
  • STM32CubeIDE 또는 Keil IDE 설치 및 설정
  • CMSIS-RTOS v1 패키지 다운로드 및 설정
  • FreeRTOS 예제 프로젝트 가져오기 및 빌드하기
  • 디버깅 환경 구성 및 주요 설정 파일 설명

1. 개발 환경 설정

1.1 필요 소프트웨어 다운로드

  1. STM32CubeIDE

  2. Keil IDE (필요 시)

  3. CMSIS-RTOS v1

1.2 설치 과정

STM32CubeIDE 설치

  1. 다운로드한 설치 파일을 실행합니다.
  2. 설치 마법사를 따라 설치를 완료합니다.
  3. STM32CubeIDE를 실행하고 "Open Perspective"에서 "C/C++"를 선택합니다.

Keil IDE 설치 (선택 사항)

  1. 설치 파일을 실행하고 설치 마법사를 따라 진행합니다.
  2. 설치가 완료되면 "Pack Installer"에서 필요한 CMSIS 패키지를 다운로드합니다.

2. CMSIS-RTOS v1 패키지 다운로드 및 설정

2.1 CMSIS-RTOS v1 다운로드

  1. CMSIS GitHub에서 최신 릴리스를 확인합니다.
  2. 릴리스 아카이브 파일을 다운로드한 후 적절한 디렉토리에 압축을 풉니다.

2.2 프로젝트 설정에 CMSIS 추가

  1. STM32CubeIDE:

    • 새 프로젝트를 생성하거나 기존 프로젝트를 엽니다.
    • "Project Explorer"에서 프로젝트를 선택한 후 우클릭하여 "Properties"를 선택합니다.
    • "C/C++ General > Paths and Symbols" 메뉴에서 CMSIS 경로를 추가합니다.
  2. Keil IDE:

    • 프로젝트 설정에서 "Options for Target"을 클릭합니다.
    • "Include Paths"에 CMSIS 헤더 파일 경로를 추가합니다.

3. FreeRTOS 예제 프로젝트 가져오기 및 빌드하기

3.1 FreeRTOS 예제 프로젝트 가져오기

  1. STM32CubeIDE의 "File > Import > Existing Projects into Workspace" 메뉴를 클릭합니다.
  2. CMSIS-RTOS 예제 프로젝트가 포함된 디렉토리를 선택합니다.
  3. 프로젝트를 가져온 후 "Finish" 버튼을 클릭합니다.

3.2 FreeRTOS 예제 빌드

  1. 프로젝트를 선택하고 "Build" 버튼을 클릭합니다.
  2. 빌드가 성공적으로 완료되면 생성된 실행 파일이 "Debug" 또는 "Release" 폴더에 위치합니다.

4. 디버깅 환경 구성 및 주요 설정 파일 설명

4.1 디버깅 환경 구성

  1. STM32CubeIDE:

    • "Run > Debug Configurations" 메뉴를 엽니다.
    • "STM32 Cortex-M C/C++ Application"을 선택하고 "New"를 클릭하여 새 디버그 구성을 만듭니다.
    • 디버깅 설정을 완료한 후 "Debug" 버튼을 클릭합니다.
  2. Keil IDE:

    • "Debug" 메뉴에서 "Start/Stop Debug Session"을 클릭합니다.
    • 디버깅 화면에서 RTOS 상태를 확인할 수 있습니다.

4.2 주요 설정 파일 설명

4.2.1 FreeRTOSConfig.h

FreeRTOS 설정을 정의하는 핵심 파일입니다. 주요 설정 항목:

  • configUSE_PREEMPTION: 선점형 스케줄링 사용 여부
  • configUSE_IDLE_HOOK: Idle Hook 함수 사용 여부
  • configMAX_PRIORITIES: 태스크의 최대 우선순위 개수
  • configMINIMAL_STACK_SIZE: 최소 스택 크기

4.2.2 cmsis_os.c

CMSIS-RTOS API를 정의하며, FreeRTOS 커널과 CMSIS API 간의 인터페이스 역할을 합니다.

5. 결과 확인

디버깅 모드에서 실행하여 태스크가 올바르게 스케줄링되고 실행되는지 확인합니다. 아래는 기본적인 예제 태스크 코드입니다:

#include "cmsis_os.h"
#include "stm32f4xx_hal.h"

void Task1(void const *argument) {
    for (;;) {
        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
        osDelay(1000);
    }
}

void Task2(void const *argument) {
    for (;;) {
        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
        osDelay(500);
    }
}

int main(void) {
    HAL_Init();
    SystemClock_Config();

    osThreadDef(Task1Name, Task1, osPriorityNormal, 0, 128);
    osThreadDef(Task2Name, Task2, osPriorityNormal, 0, 128);

    osThreadCreate(osThread(Task1Name), NULL);
    osThreadCreate(osThread(Task2Name), NULL);

    osKernelStart();

    for (;;) {}
}

위 코드에서 Task1Task2는 각각 GPIO를 제어하며 주기적으로 LED를 깜박입니다.

결론

이번 글에서는 FreeRTOS(CMSIS v1) 개발 환경을 설정하고 간단한 태스크를 구현하는 방법을 다뤘습니다. FreeRTOS는 강력한 실시간 운영 체제 솔루션으로, 이를 활용하여 더욱 복잡한 애플리케이션을 개발할 수 있습니다. 질문이나 피드백이 있다면 댓글로 남겨주세요!

반응형

'FreeRTOS' 카테고리의 다른 글

FreeRTOS와 CMSIS-RTOS v1: 실시간 운영 체제의 세계  (0) 2025.01.09