반응형
Message Queue
동기화 때 사용한 세마포어와 지난 번에 다룬 이벤트 플래그는 bit 값을 바꾸고 그 bit 값에 대한 합의된 기능을 수행하는 방식이였다.
반면, 메시지 큐는 정수, 실수, 문자열 등의 여러 데이터 구조를 전송할 수 있는 IPC 기능이다.
Apply
QueueHandle_t xQueueCreate
(
UBaseType_t uxQueueLength,
UBaseType_t uxItemSize
);
메시지 큐를 생성하는 함수이다. 첫 번째 인자는 큐의 항목의 개수, 두 번째 인자는 각 항목의 크기를 뜻한다. 여기서 크기는 바이트 단위이다.
BaseType_t xQueueSend(
QueueHandle_t xQueue,
const void *pvItemToQueue,
TickType_t xTicksToWait
);
큐에 데이터를 보내는 함수이다. xQueue는 큐의 핸들, pvItemToQueue는 큐에 삽입할 항목의 포인터, xTicksToWait는 큐가 가득 차있을 때 블록할 시간(틱 단위)을 의미한다. 성공적으로 삽입되었다면 pdPASS를 반환한다.
BaseType_t xQueueReceive
(
QueueHandle_t xQueue,
void *pvBuffer,
TickType_t xTicksToWait
);
큐에서 데이터를 받는 함수이다. pvBuffer는 수신할 데이터를 저장할 버퍼의 포인터, xTickToWait는 큐가 비어있을 때 블록할 시간(틱 단위)를 의미한다. 성공적으로 데이터를 받았다면 pdPASS를 반환한다.
many to one
多 : 1 통신인 경우에는 해당 정보를 누가 보냈는지 알아야할 수도 있다. 이 경우에서 FreeRTOS는 구조체 사용을 권장한다. 이 구조체에는 uint16_t 자료형의 task_id가 추가되어야 하고, 따라서 해당 메시지의 주인을 알 수 있게 된다.
반응형
'현생 > 임베디드' 카테고리의 다른 글
ARM Cortex-M3 Processor Datasheet - 특징 정리 (0) | 2024.08.11 |
---|---|
ARM 프로세서 - CORTEX M3 (0) | 2024.08.10 |
FreeRTOS - Event Flag Group (0) | 2024.08.08 |
FreeRTOS - Interrupt (0) | 2024.08.07 |
FreeRTOS - 임계 영역 (0) | 2024.08.06 |