29 QueueRTOS(
int size, TickType_t writeMaxWait = portMAX_DELAY,
30 TickType_t readMaxWait = portMAX_DELAY,
31 Allocator& allocator = DefaultAllocator) {
33 p_allocator = &allocator;
34 read_max_wait = readMaxWait;
35 write_max_wait = writeMaxWait;
45 void setReadMaxWait(TickType_t ticks) { read_max_wait = ticks; }
47 void setWriteMaxWait(TickType_t ticks) { write_max_wait = ticks; }
53 if (size != queue_size) {
61 bool enqueue(T& data) {
63 if (xQueue==
nullptr)
return false;
64 return xQueueSend(xQueue, (
void*)&data, (TickType_t)write_max_wait);
69 if (xQueue==
nullptr)
return false;
70 return xQueuePeek(xQueue, &data, (TickType_t)read_max_wait);
73 bool dequeue(T& data) {
75 if (xQueue==
nullptr)
return false;
76 return xQueueReceive(xQueue, &data, (TickType_t)read_max_wait);
79 size_t size() {
return queue_size; }
83 if (xQueue==
nullptr)
return false;
88 bool empty() {
return size() == 0; }
91 QueueHandle_t xQueue =
nullptr;
92 TickType_t write_max_wait = portMAX_DELAY;
93 TickType_t read_max_wait = portMAX_DELAY;
94 Allocator* p_allocator =
nullptr;
96 uint8_t* p_data =
nullptr;
97 StaticQueue_t queue_buffer;
100 if (queue_size > 0) {
101#if configSUPPORT_STATIC_ALLOCATION
102 p_data = (uint8_t*)p_allocator->allocate((queue_size + 1) *
sizeof(T));
103 if (p_data ==
nullptr)
return false;
104 xQueue = xQueueCreateStatic(queue_size,
sizeof(T), p_data, &queue_buffer);
106 xQueue = xQueueCreate(queue_size,
sizeof(T));
108 if (xQueue ==
nullptr)
return false;
114 if (xQueue !=
nullptr) vQueueDelete(xQueue);
115 if (p_data !=
nullptr) p_allocator->free(p_data);