队列(一)

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
)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值