그라운드 임베디드 유튜브 구독

노트 / RTOS

펌웨어RTOS8 / 8

FreeRTOS 실습: 센서, 통신, 제어를 태스크로 나누기

STM32에서 FreeRTOS로 IMU 읽기, 제어, UART 로그를 태스크로 분리하는 구조 예. 처음 구성할 때 지킬 순서.

GROUND EMBEDDED · 정리 노트RTOS 08FreeRTOS 실습태스크 / ISR주기우선순위타이머 ISR1kHz(인터럽트)control1ms4

구조 예: 밸런싱 로봇

태스크 / ISR 주기 우선순위 하는 일
타이머 ISR 1kHz (인터럽트) 제어 태스크에 알림
control 1ms 4 IMU 읽기 → 필터 → PID → PWM
comm 이벤트 3 블루투스 명령 수신, 게인 변경
telemetry 20ms 2 각도, 출력 값을 큐에서 꺼내 전송
ui 100ms 1 LED 상태, 배터리 확인

연결

  • 타이머 ISR → vTaskNotifyGiveFromISR로 control 깨움 (정확한 주기)
  • control → telemetry: 큐로 샘플 전달 (가득 차면 버림)
  • comm → control: 새 게인을 큐로 전달하고 control이 루프 시작에서 반영 (공유 변수 경쟁 없음)

처음 구성할 때 순서

  1. CubeMX에서 FreeRTOS(CMSIS-RTOS v2)를 켜고, HAL 타임베이스를 SysTick이 아닌 다른 타이머로 바꿉니다(SysTick은 RTOS가 씀).
  2. 빈 태스크 두 개로 LED 두 개를 다른 주기로 깜빡여 스케줄링 확인
  3. 스택 감시와 오버플로 훅을 켬
  4. 기능을 하나씩 태스크로 옮기며 매번 high water mark 확인
  5. 로직 분석기에 태스크별 GPIO 토글을 찍어 실제 실행 타이밍 확인

이 마지막 단계가 "돌아가는 것 같다"와 "주기를 지킨다"를 가르는 확인입니다.