UFLO:如何在Spring生态中构建企业级可扩展工作流引擎
2026/6/6 18:29:16
队列简单的说 他就是传递信息的作用
队列项目: 队列中的每个数据单元(如示意图中的每个圆圈)
队列长度: 队列能存储的最大项目数量(如最多存放5个数据)
0_portMAX_DELAY 等待指定时间后超时返回
portMAX_DELAY 死等直到操作成功
下面我们分析队列相关API函数
QueueHandle_t xQueueCreate( UBaseType_t uxQueueLength, UBaseType_t uxItemSize );下面我们进行写队列
BaseType_t xQueueSend( QueueHandle_t xQueue, const void* pVItemToQueue, TickType_t xTicksToWait ) BaseType_t xQueueReceive(QueueHandle_t xQueue, void *pvBuffer, TickType_t xTicksToWait);这是我们读队列
xQueue:待读取的队列句柄 pvBuffer:数据读取缓冲区指针(存放读出数据) xTicksToWait:阻塞超时时间(单位:系统时钟节拍) 下面我们开始进行实际操作
我们的任务是按下key1 向队列发数据 按下key2 向队列接收数据
我们创建任务 下面我们创建队列
其中
16是我们的队列是 长度 uint16_t 8位 为一个字节
所以是两个字节
下面我放进去源代码
void StartTaskReceive(void const * argument) { /* USER CODE BEGIN StartTaskReceive */ uint16_t buf; BaseType_t status; /* Infinite loop */ for(;;) { if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == GPIO_PIN_RESET) { osDelay(20); if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == GPIO_PIN_RESET) { status = xQueueReceive(myQueueHandle, &buf, 0); if (status == pdTRUE) { printf("读取队列成功,读出值%d\r\n", buf); } else { printf("读取队列失败\r\n"); } } while (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == GPIO_PIN_RESET); } osDelay(10); } /* USER CODE END StartTaskReceive */ }后面我会更新 二值信号量