Browse Source

add:添加rtos_queue

Dozingfiretruck 3 years ago
parent
commit
9ddb67bdf9
1 changed files with 59 additions and 0 deletions
  1. 59 0
      application/src/luat_rtos_air105.c

+ 59 - 0
application/src/luat_rtos_air105.c

@@ -106,3 +106,62 @@ void luat_mutex_release(void *mutex)
 {
 	OS_MutexDelete(mutex);
 }
+
+
+int luat_rtos_queue_create(luat_rtos_queue_t *queue_handle, uint32_t item_count, uint32_t item_size)
+{
+	if (!queue_handle) return -1;
+	QueueHandle_t pxNewQueue;
+	pxNewQueue = xQueueCreate(item_count, item_size);
+	if (!pxNewQueue)
+		return -1;
+	*queue_handle = pxNewQueue;
+	return 0;
+}
+
+int luat_rtos_queue_delete(luat_rtos_queue_t queue_handle)
+{
+	if (!queue_handle) return -1;
+    vQueueDelete ((QueueHandle_t)queue_handle);
+	return 0;
+}
+
+int luat_rtos_queue_send(luat_rtos_queue_t queue_handle, void *item, uint32_t item_size, uint32_t timeout)
+{
+	if (!queue_handle || !item) return -1;
+	if (OS_CheckInIrq())
+	{
+		BaseType_t pxHigherPriorityTaskWoken;
+		if (xQueueSendToBackFromISR(queue_handle, item, &pxHigherPriorityTaskWoken) != pdPASS)
+			return -1;
+		portYIELD_FROM_ISR(pxHigherPriorityTaskWoken);
+		return 0;
+	}
+	else
+	{
+		if (xQueueSendToBack (queue_handle, item, timeout) != pdPASS)
+			return -1;
+	}
+	return 0;
+}
+
+int luat_rtos_queue_recv(luat_rtos_queue_t queue_handle, void *item, uint32_t item_size, uint32_t timeout)
+{
+	if (!queue_handle || !item)
+		return -1;
+	BaseType_t yield = pdFALSE;
+	if (OS_CheckInIrq())
+	{
+		if (xQueueReceiveFromISR(queue_handle, item, &yield) != pdPASS)
+			return -1;
+		portYIELD_FROM_ISR(yield);
+		return 0;
+	}
+	else
+	{
+		if (xQueueReceive(queue_handle, item, timeout) != pdPASS)
+			return -1;
+	}
+	return 0;
+}
+