[FreeRTOS] Message Queue (메시지 큐)
메시지 큐는 RTOS 에서 가장 많이 사용되는 IPC 라고 봐도 무방 함.
TASK나 ISR에서 또 다른 TASK로 포인터 변수나 데이터를 전달 함.
xQueueSend 와 xQueueSendToBack 은 동일한 동작으로 FIFO를 수행 함.
API
xQueueCreate : 큐 생성
#include "queue.h"
QueueHandle_t xQueueCreate( UBaseType_t uxQueueLength, UBaseType_t uxItemSize );
// # Parameters
// uxQueueLength : 큐 길이
// uxItemSize : 큐 아이템 사이즈
// # Return : 큐 핸들
xQueueReceive : 메시지 큐 대기
#include “queue.h”
BaseType_t xQueueReceive(QueueHandle_t xQueue, void *pvBuffer, TickType_t xTicksToWait);
// # Parameters
// xQueue : 큐 핸들
// pvBuffer : 수신 된 데이터가 복사 될 메모리 포인터
// xTicksToWait : 대기 시간
xQueueSend : 메시지 전송
#include "queue.h"
BaseType_t xQueueSend(QueueHandle_t xQueue, const void * pvItemToQueue, TickType_t xTicksToWait);
// # Parameters
// xQueue : 큐 핸들
// pvItemToQueue : 큐에 복사할 데이터에 대한 포인터
// xTicksToWait : 대기열이 이미 가득 찬 경우, 대기열에서 큐를 사용할 수 있을 때 까지
// Task가 blocked 상태를 유지해야 하는 최대 시간
// # Return Values
// pdPASS : 데이터가 큐에 성공적으로 전송된 경우
// errQUEUE_FULL : 큐가 이미 가득 차서 데이터를 큐에 쓸 수 없는 경우
uxQueueMessagesWaiting : 큐에 존재 하는 현재 아이템 갯수를 알려 줌
#include “queue.h”
UBaseType_t uxQueueMessagesWaiting(const QueueHandle_t xQueue);
// # Parameters
// xQueue : 큐 핸들
// # Returned Value
// 쿼리 중인 대기열에 보관된 아이템 항목 수
xQueueReset : 큐 리셋
#include “queue.h”
BaseType_t xQueueReset(QueueHandle_t xQueue);
// # Parameters
// xQueue : 큐 핸들
// # Return Values
// 항상 pdPASS를 반환 함