//向队列发送数据任务函数
void sendTask (void *pvParam) {
QueueHandle_t QHandle; //发送函数定义句柄QHandle
QHandle = (QueueHandle_t)pvParam; //传入的无类型void*pvParam指针定义为QueueHandle_t类型指针,并赋值给QHandle
int i = 0;
BaseType_t SendStatus; //定义发送数据返回值
while (1) {
SendStatus = xQueueSend (QHandle, &i, 0); //将发送数据变量的地址放入队列,队列句柄名QHandle,延迟等待时间0;
//返回发送状态是否成功给Send Status
if (SendStatus == pdPASS)
Serial.println("Send Done.");
else
Serial.println("Send Fail.");
i++;
vTaskDelay(500 / portTICK_PERIOD_MS);
}
}
void reciTask(void *pvParam) {
QueueHandle_t QHandle;
QHandle = (QueueHandle_t)pvParam;
BaseType_t ReciStatus;
int j = 0;
while (1) {
ReciStatus = xQueueReceive(QHandle, &j, 0);
if (ReciStatus == pdPASS)
Serial.println(j);
else
Serial.println("Recieved Fail.");
vTaskDelay(500 / portTICK_PERIOD_MS);
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
QueueHandle_t QHandle; //创建队列句柄QHandle
QHandle = xQueueCreate(5, sizeof(int)); //创建队列,最多5个元素,整形,队列句柄未QHandle
if (QHandle != NULL) { //如果返回值不为空,证明创建成功
Serial.println("Create Queue successfully!");
xTaskCreate(sendTask, "sendTask", 1024 * 5, (void*)QHandle, 1, NULL);//创建发送数据任务,传递参数为队列句柄
xTaskCreate(reciTask, "reciTask", 1024 * 5, (void*)QHandle, 1, NULL);//创建接收数据任务,传递参数为队列句柄
}
else {
Serial.println("Create Queue Failed!");
}
}
void loop() {
// put your main code here, to run repeatedly:
}