반응형
소개
CMSIS-RTOS v1은 ARM Cortex-M 프로세서를 대상으로 하는 표준 RTOS 인터페이스입니다. 이 글에서는 STM32CubeIDE 또는 Keil IDE를 사용하여 CMSIS-RTOS v1 기반 FreeRTOS를 설정하고 구현하는 방법을 설명합니다. 다음은 이 글의 주요 내용입니다:
- 개발 환경 설정
- STM32CubeIDE 또는 Keil IDE 설치 및 설정
- CMSIS-RTOS v1 패키지 다운로드 및 설정
- FreeRTOS 예제 프로젝트 가져오기 및 빌드하기
- 디버깅 환경 구성 및 주요 설정 파일 설명
1. 개발 환경 설정
1.1 필요 소프트웨어 다운로드
STM32CubeIDE
- ST 공식 웹사이트에서 최신 버전을 다운로드합니다.
Keil IDE (필요 시)
- Keil 공식 웹사이트에서 MDK-ARM Lite 버전을 다운로드합니다.
CMSIS-RTOS v1
- ARM CMSIS GitHub 저장소에서 다운로드합니다.
1.2 설치 과정
STM32CubeIDE 설치
- 다운로드한 설치 파일을 실행합니다.
- 설치 마법사를 따라 설치를 완료합니다.
- STM32CubeIDE를 실행하고 "Open Perspective"에서 "C/C++"를 선택합니다.
Keil IDE 설치 (선택 사항)
- 설치 파일을 실행하고 설치 마법사를 따라 진행합니다.
- 설치가 완료되면 "Pack Installer"에서 필요한 CMSIS 패키지를 다운로드합니다.
2. CMSIS-RTOS v1 패키지 다운로드 및 설정
2.1 CMSIS-RTOS v1 다운로드
- CMSIS GitHub에서 최신 릴리스를 확인합니다.
- 릴리스 아카이브 파일을 다운로드한 후 적절한 디렉토리에 압축을 풉니다.
2.2 프로젝트 설정에 CMSIS 추가
STM32CubeIDE:
- 새 프로젝트를 생성하거나 기존 프로젝트를 엽니다.
- "Project Explorer"에서 프로젝트를 선택한 후 우클릭하여 "Properties"를 선택합니다.
- "C/C++ General > Paths and Symbols" 메뉴에서 CMSIS 경로를 추가합니다.
Keil IDE:
- 프로젝트 설정에서 "Options for Target"을 클릭합니다.
- "Include Paths"에 CMSIS 헤더 파일 경로를 추가합니다.
3. FreeRTOS 예제 프로젝트 가져오기 및 빌드하기
3.1 FreeRTOS 예제 프로젝트 가져오기
- STM32CubeIDE의 "File > Import > Existing Projects into Workspace" 메뉴를 클릭합니다.
- CMSIS-RTOS 예제 프로젝트가 포함된 디렉토리를 선택합니다.
- 프로젝트를 가져온 후 "Finish" 버튼을 클릭합니다.
3.2 FreeRTOS 예제 빌드
- 프로젝트를 선택하고 "Build" 버튼을 클릭합니다.
- 빌드가 성공적으로 완료되면 생성된 실행 파일이 "Debug" 또는 "Release" 폴더에 위치합니다.
4. 디버깅 환경 구성 및 주요 설정 파일 설명
4.1 디버깅 환경 구성
STM32CubeIDE:
- "Run > Debug Configurations" 메뉴를 엽니다.
- "STM32 Cortex-M C/C++ Application"을 선택하고 "New"를 클릭하여 새 디버그 구성을 만듭니다.
- 디버깅 설정을 완료한 후 "Debug" 버튼을 클릭합니다.
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 (;;) {}
}
위 코드에서 Task1
과 Task2
는 각각 GPIO를 제어하며 주기적으로 LED를 깜박입니다.
결론
이번 글에서는 FreeRTOS(CMSIS v1) 개발 환경을 설정하고 간단한 태스크를 구현하는 방법을 다뤘습니다. FreeRTOS는 강력한 실시간 운영 체제 솔루션으로, 이를 활용하여 더욱 복잡한 애플리케이션을 개발할 수 있습니다. 질문이나 피드백이 있다면 댓글로 남겨주세요!
반응형
'FreeRTOS' 카테고리의 다른 글
FreeRTOS와 CMSIS-RTOS v1: 실시간 운영 체제의 세계 (0) | 2025.01.09 |
---|