main.c
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/queue.h"
#include "freertos/task.h"
#include "esp_log.h"
QueueHandle_t queue_Handle = NULL;
typedef struct{
int value;
}queue_data_t;
void taskA(void *pvParameters)
{
queue_data_t data;
while(1){
if(pdTRUE == xQueueReceive(queue_Handle, &data, 100)){ //从目标队列queue_Handle接收数据到data,如果队满则等待100个tick
ESP_LOGI("TASK_A", "Received data from queue");
printf("Value: %d\n", data.value);
}
}
}
void taskB(void *pvParameters)
{
queue_data_t data;
data.value = 0;
while(1){
data.value++;
if(pdTRUE == xQueueSend(queue_Handle, &data, 100)){ //向目标队列queue_Handle发送data的数据,如果队满则等待100个tick
ESP_LOGI("TASK_B", "Sent data to queue");
}
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
/*
queue的Send/Receive操作中,data都需要和队列元素的type一样
*/
void app_main(void)
{
//创建一个队列,队列长度为10;队列元素的字节数为sizeof(queue_data_t),也就是队列元素的type为queue_data_t
queue_Handle = xQueueCreate(10, sizeof(queue_data_t));
//任务函数,任务名字,任务堆栈大小,传递给任务函数的参数,任务优先级,任务句柄,运行核
xTaskCreatePinnedToCore(taskA, "Task_A", 2048, NULL, 1, NULL, 0);
xTaskCreatePinnedToCore(taskB, "Task_B", 2048, NULL, 1, NULL, 1);
while (1)
{
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
CMakeLists.txt
idf_component_register(
SRCS "main.c"
INCLUDE_DIRS "."
REQUIRES
driver
log
)