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

노트 / 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 준비"처럼 여러 조건을 동시에 기다리거나, 하나라도 오면 깨어나게 할 수 있습니다.

무료 전자책이 주제를 한 권으로 이어 읽기 (PDF 3권)→

태스크 알림 (Task Notification)

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

고르는 기준

필요 도구
데이터 전달 큐
일이 생겼다는 신호 하나 태스크 알림, 이진 세마포어
여러 조건 조합 이벤트 그룹
자원 독점 뮤텍스
영상으로 이어 보기RC카 만들기 시리즈 6편대기업 임베디드 개발자 Lego RC카 메이킹 시작합니다. 【RC카 개발1】FREE PDF무료 전자책 3권 받기이 주제를 한 권으로 이어서 읽고 싶다면. BLDC 모터 제어, 직렬통신, 센서를 책 분량으로 묶었습니다. 이메일만 남기면 바로 받습니다.무료로 받기 →