当前位置: 首页 > news >正文

以下是一个基于 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
    

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

http://www.xdnf.cn/news/88399.html

相关文章:

  • crontab 定时备份 mysql 数据库
  • CF思维题(cf round 1019 div.2 b题)
  • ADS基本操作之S参数仿真
  • 如何高效优化复杂的SQL查询:以项目发布管理为例
  • Java知识大纲
  • 内存管理之文件内存映射(mmap):外存(磁盘/flash)的文件映射到应用层(跨越内核层)
  • 解析芯片低功耗设计的底层逻辑与实现方法
  • 最新项目笔记
  • Java的反射机制(曼波超易懂图文版)
  • 一洽智能硬件行业解决方案探索与实践
  • 从零开始学Python游戏编程33-指令模式2
  • AI大模型-window系统CPU版安装anaconda以及paddle详细步骤-亲测有效
  • c++STL——stack、queue、priority_queue的模拟实现
  • JDK安装超详细步骤
  • c#操作excel
  • Codeforces Round 1019 (Div. 2)(A-D)
  • 【线段树】P10381 「HOI R1」杂赛选比|普及+
  • SpringbootWeb开发(注解和依赖配置)
  • Sqlserver安全篇之_Sqlcmd命令使用windows域账号认证sqlserver遇到问题如何处理的案例
  • 基于STM32、HAL库的MCP4018T数字电位器驱动程序设计
  • 第5章-1 优化服务器设置
  • 08_Docker Portainer可视化管理
  • Kafka 面试,java实战贴
  • Java中常见API的分类概述及示例
  • Spark集群搭建-spark-local
  • [Java · 铢积寸累] 数据结构 — 数组类型 - Arrays 工具类详解
  • 文献分享:不同抗体表位作图技术比较
  • 《计算机视觉度量:从特征描述到深度学习》—深度学习图像特征工程
  • 动态加载内容时selenium如何操作?
  • Kubernetes相关的名词解释etcdctl(20)