以下是一个基于 ESP32 - S3 实现消息队列收发测试的 C 例程

以下是一个基于 ESP32 - S3 实现消息队列收发测试的 C 例程,该例程使用了 ESP - IDF(Espressif IoT Development Framework)。消息队列是 FreeRTOS 提供的一种机制,用于在不同任务之间传递数据。

代码实现

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"

// 定义消息队列句柄
QueueHandle_t xQueue;

// 发送任务
void vSenderTask(void *pvParameters) {
    int sendValue = 0;
    while (1) {
        // 向消息队列发送数据
        if (xQueueSend(xQueue, &sendValue, portMAX_DELAY) == pdPASS) {
            printf("Sent value: %d\n", sendValue);
        }
        sendValue++;
        // 任务延时 1 秒
        vTaskDelay(pdMS_TO_TICKS(1000));
    }
}

// 接收任务
void vReceiverTask(void *pvParameters) {
    int receivedValue;
    while (1) {
        // 从消息队列接收数据
        if (xQueueReceive(xQueue, &receivedValue, portMAX_DELAY) == pdPASS) {
            printf("Received value: %d\n", receivedValue);
        }
    }
}

void app_main(void) {
    // 创建消息队列,队列长度为 10,每个元素大小为 int 类型
    xQueue = xQueueCreate(10, sizeof(int));

    if (xQueue != NULL) {
        // 创建发送任务
        xTaskCreate(vSenderTask, "SenderTask", 2048, NULL, 1, NULL);
        // 创建接收任务
        xTaskCreate(vReceiverTask, "ReceiverTask", 2048, NULL, 1, NULL);
    } else {
        printf("Failed to create queue!\n");
    }
}

代码解释

  1. 消息队列句柄

    • QueueHandle_t xQueue;:定义了一个消息队列句柄,用于后续对消息队列的操作。
  2. 发送任务 vSenderTask

    • 该任务会不断地向消息队列发送递增的整数。
    • xQueueSend(xQueue, &sendValue, portMAX_DELAY):将 sendValue 的值发送到消息队列中。portMAX_DELAY 表示如果队列已满,任务会一直阻塞直到有空间可用。
  3. 接收任务 vReceiverTask

    • 该任务会不断地从消息队列接收数据。
    • xQueueReceive(xQueue, &receivedValue, portMAX_DELAY):从消息队列中接收数据并存储到 receivedValue 中。portMAX_DELAY 表示如果队列为空,任务会一直阻塞直到有数据可用。
  4. 主函数 app_main

    • xQueueCreate(10, sizeof(int)):创建一个长度为 10 的消息队列,每个元素的大小为 int 类型。
    • 如果消息队列创建成功,则创建发送任务和接收任务。

编译和运行

  1. 确保你已经安装了 ESP - IDF 开发环境。
  2. 将上述代码保存为 main.c,并将其放在 ESP - IDF 项目的 main 目录下。
  3. 在项目根目录下执行以下命令进行编译和烧录:
    idf.py build
    idf.py -p /dev/ttyUSB0 flash  # 根据实际情况修改串口设备名
    
  4. 打开串口监视器查看输出:
    idf.py -p /dev/ttyUSB0 monitor
    

运行会看到发送任务不断发送递增的整数,接收任务不断接收并打印这些整数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值