Post

STM32 FreeRTOS 포팅하기

STM32 FreeRTOS 포팅하기

STM32CudeIDE에서 FreeRTOS CMSISV2를 NucleoG474RE에 포팅하기

임베디드 시스템 개발에 착수하게 되면, 작업과 리소스를 효율적으로 관리할 수 있는 실시간 운영 체제(RTOS)의 중요성을 자연스럽게 깨닫게 됩니다. RTOS 구현을 위해 선택할 수 있는 여러 솔루션 중, 많은 사용자들에 의해 검증된 오픈 소스 솔루션인 FreeRTOS는 매우 유용한 기능을 제공합니다. 이번 포스트에서는 RTOS의 기본 사항을 살펴보고 STM32 마이크로컨트롤러에 FreeRTOS를 포팅하는 과정을 시작해 보겠습니다.

개발 보드

img NUCLEO-G474RE 보드를 사용합니다.

목차

  1. STM32CudeIDE 설정
  2. Task 생성

0 RTOS란?

RTOS는 실시간 운영 체제(Real-Time Operating System)의 약자로, 특정한 시간 내에 반드시 응답해야 하는 실시간 애플리케이션을 처리하기 위해 설계된 운영 체제입니다. 범용 운영 체제(OS)와 달리 RTOS는 시간 제약 내에서 작업이 실행되도록 보장하는 특징이 있습니다.

1 STM32CudeIDE 설정

img Pinout & Configuration 탭에서 Middleware and Software Packs 아래에 있는 FREERTOS를 선택합니다. 처음에는 Disable로 설정되어 있을 텐데, 이를 CMSIS_V2로 변경합니다.

img CMSIS_V2로 변경하면 기본 설정 값으로 자동으로 셋팅됩니다. 이 상태에서 바로 Code Generation을 시도하면 아래와 같은 경고창이 나타납니다.

경고: 코드 생성

img 첫 번째 경고는 RTOS를 사용할 때 systick이 아닌 다른 HAL 타임베이스 소스를 사용하는 것이 권장된다는 내용입니다.

img System Core에서 SYSTimebase Source를 변경해야 합니다. 사용할 수 있는 타이머는 systick부터 TIM1~TIM7까지 다양한데, 적절한 타이머는 각 칩의 설정된 타이머 정보를 참고하여 선택합니다.

img img STM32G474B/C/xE 시리즈의 타이머 기능을 고려해 Basic type 타이머인 TIM6 또는 TIM7 중 하나로 설정합니다. 이 타이머들은 Complementary outputs을 지원하지 않으므로 적합한 선택지입니다.

img 또한, 새로운 라이브러리가 재진입하도록 하려면 USE_NEWLIB_REENTRANT 설정을 활성화해야 합니다. 이는 FreeRTOS > Advanced Settings에서 설정할 수 있으며, 이 옵션은 RAM 사용량을 증가시킵니다.

img img 설정을 마친 후 코드 생성을 다시 시도하면 경고 없이 진행되며, RTOS가 정상적으로 설정됩니다. 이때 기본 Task가 main.c에 생성된 것을 확인할 수 있습니다.

2 Task 생성

img FREERTOS Mode and Configuration 창에서 Add 버튼을 눌러 Task를 생성할 수 있습니다.

img img Task 이름과 Stack 크기 등을 설정한 후 Task를 생성합니다.

img img img 생성된 Task는 코드에 추가된 것을 확인할 수 있습니다. 이제 Task가 어떻게 동작하는지 예시 코드를 작성해 확인해 보겠습니다.


This post is licensed under CC BY 4.0 by the author.