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

노트 / RTOS

펌웨어RTOS5 / 8

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

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

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

큐

데이터를 복사해서 넘기는 FIFO입니다. 큐가 비어 있으면 받는 태스크는 잠들어 기다리고, 데이터가 들어오면 깨어납니다.

typedef struct { int16_t ax, ay, az; } imu_t;
QueueHandle_t q = xQueueCreate(8, sizeof(imu_t));

// 생산자
xQueueSend(q, &sample, 0);
// 소비자
imu_t s;
if (xQueueReceive(q, &s, pdMS_TO_TICKS(10)) == pdTRUE) { /* 처리 */ }
  • 전역 변수와 뮤텍스 조합보다 실수할 여지가 적습니다.
  • 큰 데이터는 복사 비용이 크니 포인터나 버퍼 번호를 넘기고 소유권을 명확히 합니다.
  • 가득 찼을 때 버릴지, 기다릴지, 덮어쓸지 정합니다.

이벤트 그룹

비트 여러 개로 된 플래그 묶음입니다. "IMU 준비 그리고 GPS 준비"처럼 여러 조건을 동시에 기다리거나, 하나라도 오면 깨어나게 할 수 있습니다.

태스크 알림 (Task Notification)

FreeRTOS에서 특정 태스크 하나에 신호나 값 하나를 보낼 때는 태스크 알림이 세마포어보다 빠르고 메모리도 적게 씁니다.

고르는 기준

필요 도구
데이터 전달 큐
일이 생겼다는 신호 하나 태스크 알림, 이진 세마포어
여러 조건 조합 이벤트 그룹
자원 독점 뮤텍스