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

노트

RTOS 노트

할 일이 많아지면 무한 루프 하나로는 감당이 안 됩니다. 실시간 운영체제가 그 답입니다.

로드맵에서 보기 →
GROUND EMBEDDED · 정리 노트RTOS 01슈퍼루프의 한계 1while (1) { 2 read_imu();// 1ms 3 update_display();// 30ms ← 이 동안 아무것도… 4 parse_uart();
RTOS

슈퍼루프의 한계: 언제 RTOS가 필요한가

while(1) 하나로 모든 일을 돌리면 가장 느린 작업이 전체 반응 속도를 정합니다. RTOS로 넘어갈 신호들.

GROUND EMBEDDED · 정리 노트RTOS 02태스크와 스케줄러 1void imu_task(void *arg) { 2 for (;;) { 3 read_imu(); 4 vTaskDelay(pdMS_TO_TICKS(1));// 1m…
RTOS

태스크와 스케줄러

작업을 각자의 무한 루프를 가진 태스크로 나누고, 스케줄러가 CPU 시간을 나눠 줍니다. 태스크 상태와 틱의 개념.

GROUND EMBEDDED · 정리 노트RTOS 03우선순위와 선점태스크주기 / 마감우선순위모터 속도 제어1ms높음IMU 읽기5ms중상
RTOS

우선순위와 선점: 급한 일이 먼저

선점형 스케줄러는 더 높은 우선순위 태스크가 준비되는 즉시 CPU를 넘깁니다. 우선순위를 정하는 기준.

GROUND EMBEDDED · 정리 노트RTOS 04세마포어와 뮤텍스 1xSemaphoreTake(uart_mutex, portMAX_DELA… 2uart_send(buf, len); 3xSemaphoreGive(uart_mutex);
RTOS

세마포어와 뮤텍스: 공유 자원 지키기

두 태스크가 같은 UART나 변수를 동시에 건드리면 데이터가 섞입니다. 뮤텍스로 잠그고, 세마포어로 신호를 줍니다.

GROUND EMBEDDED · 정리 노트RTOS 05큐와 이벤트 그룹 1typedef struct { int16_t ax, ay, az; } … 2QueueHandle_t q = xQueueCreate(8, sizeo… 3// 생산자 4xQueueSend(q, &sample, 0);
RTOS

큐와 이벤트 그룹: 태스크끼리 대화하기

전역 변수 대신 큐로 데이터를 넘기고, 이벤트 그룹으로 여러 조건을 한꺼번에 기다립니다.

GROUND EMBEDDED · 정리 노트RTOS 06우선순위 역전01시나리오02해결: 우선순위상속03설계로 피하기
RTOS

우선순위 역전: 낮은 태스크가 높은 태스크를 막을 때

낮은 태스크가 잡은 뮤텍스 때문에 높은 태스크가 멈추고, 그 사이 중간 태스크가 CPU를 차지합니다. 화성 탐사선도 겪은 문제.

GROUND EMBEDDED · 정리 노트RTOS 07메모리와 스택 관리 1UBaseType_t left = uxTaskGetStackHighWa…// 남은…
RTOS

메모리와 스택 관리

태스크마다 스택 크기를 정해야 하고, 넘치면 다른 태스크의 메모리를 망가뜨립니다. 스택 크기를 재고 넘침을 잡는 방법.

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

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

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