VSCODE IDF 编辑ESP32程序在使用xQueueHandle队列的时候需要注意的问题

VSCODE IDF 编辑ESP32程序在使用xQueueHandle队列的时候需要注意的问题:
在官方例程中使用:

static xQueueHandle gpio_evt_queue = NULL;

来定义队列,再用

gpio_evt_queue = xQueueCreate(10, sizeof(uint32_t));

来初始化队列。
然后使用:

xQueueSendFromISR(gpio_evt_queue, &gpio_num, NULL);

来发送数据,在中断程序中使用xQueueSendFromISR。
最后是接收数据,使用

if(xQueueReceive(gpio_evt_queue, &io_num, portMAX_DELAY)) {printf("收到数据\n"); 
}

在同一个组件中的确是完全没有问题,不过在不同组件中使用发送和接收的时候,程序一直重新启动,无法正常使用,找了半天问题,不知道怎么解决,一开始是怀疑是不是没有初始化就在别的组件程序中开始使用,后来也不是这个问题。最后是不停的试,终于找到解决的方法:

定义队列必须使用:

xQueueHandle gpio_evt_queue;

不能有static静态的,也不能有=NULL,改成这样后一切正常,可以在不同的组件中相互调用,完美了。
还有队列定义有两个单词, 分别是xQueueHandle 和QueueHandle_t,发现使用没有感觉有什么区别,好像QueueHandle_t是FreeRTOS定义的,xQueueHandle 是后面再次在FreeRTOS的基础上重新定义的。
查了一下这么说:
QueueHandle:这是一个较为通用的术语,用来指代指任何类型资源的句柄或引用,比如任务句柄、队列句柄、信号量句柄等。在某些上下文中,xQueueHandle可能被用来特指代指代一个队列的句柄,但并不是一个严格定义好的类型名。

QueueHandle_t:这是FreeRTOS中定义的一个具体的数据类型,用来表示队列的句柄。当你创建一个队列时,FreeRTOS会返回一个QueueHandle_t类型的值,你可以用这个句柄来引用这个队列,进行如发送、接收数据、删除队列等操作。它是系统用于区分不同队列的一个标识符,确保操作的正确性。

所以,如果在ESP-IDF或FreeRTOS环境下讨论,xQueueHandle通常指的是对QueueHandle_t类型的一个非正式或口语化表达,两者都是指代指同一个概念,即队列的控制句柄。在编程时,你会使用QueueHandle_t作为类型定义变量,用于存储队列操作。
希望对大家有点帮助,主要还是自己对静态的理解不够吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/9899.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Aapache Tomcat AJP 文件包含漏洞(CVE-2020-1938)

1 漏洞描述 CVE-2020-1938 是 Apache Tomcat 中的一个严重安全漏洞,该漏洞涉及到 Tomcat 的 AJP(Apache JServ Protocol)连接器。由于 AJP 协议在处理请求时存在缺陷,攻击者可以利用此漏洞读取服务器上的任意文件,甚至…

量化交易入门——从零开始搭建自己的量化交易系统

本篇作为个人学习过程记录,从零开始,入门量化交易。 量化交易系统模块介绍 一般的量化交易系统包含如下的功能模块参考: 数据收集模块 数据是量化交易的基础,因此数据收集模块是整个系统的核心之一。它负责从各种数据源收集市场…

ruoyi-vue-pro 使用记录(3)

ruoyi-vue-pro 使用记录 ERP(3) ERP数据库产品销售库存采购财务 ERP 文档 主要分为 5 个核心模块:采购、销售、库存、产品、财务。 采购管理以 erp_purchase_ 作为前缀的表销售管理以 erp_sale_ 作为前缀的表库存管理以 erp_stock_ 作为前…

【Linux】Linux——Centos7安装Nginx

不需要安装包 1.安装依赖 #查看 C 环境是否安装gcc -v #查看 zlib 是否安装cat /usr/lib64/pkgconfig/zlib.pc #查看 pcre 是否安装pcre-config --version 2.安装C #安装C yum install gcc-c 3.安装pcre yum install -y pcre pcre-devel 4.安装zlib #安装 yum install -y zlib…

该问题未得到解决(仅记录)

https://releases.ubuntu.com/bionic/进入网页下载ubuntu 选择烧录软件将下载的Ubuntu烧录到U盘中 之前用这个U盘烧录过一次,成功了,后来应该是U盘受损或者是什么其他原因使得用这个U盘总是烧录失败

ChatGLM大模型简介

ChatGLM系列是国产大语言模型中性能最好、回答准确率最高的大模型。如果有毕业论文、课题研究的需要,可以关注一下这个大模型。 清华大学和智谱AI的第一代ChatGLM-6B在2023年3月份推出,开源模型推出之后不久就获得了很多的关注和使用。3个月后的2023年6…

快速上手文心一言指令

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

c++ isupper() islower()

在C中,islower()和isupper()是C标准库中提供的两个字符判断函数。这两个函数用于判断一个字符是否为小写字母或大写字母。 islower()函数的原型如下: int islower(int c);它接受一个字符作为参数,返回非零值(true)表…

【LAMMPS学习】八、基础知识(5.10)LAMMPS流形(表面)

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

【NPM】Nginx Proxy Manager 一键申请 SSL 证书,自动续期,解决阿里云SSL免费证书每3个月失效问题

文章目录 1、NPM 简介2、实战Step 1:环境搭建 也可以看作者安装笔记 Step 2:创建容器 2.1 在系统任意位置创建一个文件夹,此文档以~/nginx-proxy-manager为例。2.2 创建docker-compose.yaml2.3 启动NPM服务 Step 3:配置反向代理3…

搭建知识库必备:12个开源 Wiki 软件工具盘点

在任何成功的公司中,部门间的知识共享是至关重要的。如果没有一个简单的信息交流方法,团队怎样才能有效合作呢?Wiki软件提供了一种创建、组织及在全公司范围内分享知识的直接方法。但是,哪一种Wiki软件是最佳的选择呢?…

给网络镜像模式下的 WSL2 使用 127.0.0.1代理的方法

网络镜像模式下的WSL2虽然复制了宿主机windows的ip,但是仍然无法访问127.0.0.1的代理。经过调查,发现因为WSL2从应用商店下载而来,所以可能是UWP应用,所以需要用工具解除环回代理限制。

Java入门基础学习笔记13——数据类型

数据类型的分类: 基本数据类型 引用数据类型 基本数据类型:4大类8种类型: 定义整形用int,再大的数用long。 package cn.ensource.variable;public class VariableDemo2 {public static void main(String[] args) {//目标&#x…

深入理解C++构造函数和析构函数

目录标题 1. 构造函数默认构造函数参数化构造函数拷贝构造函数 2. 析构函数3. 构造函数和析构函数的使用场景自动资源管理防止资源泄露深拷贝和浅拷贝 4. C的类中必定有个构造函数吗?5. 总结 C中的构造函数和析构函数是类对象生命周期管理的重要组成部分。构造函数用…

Android11 InputDispatcher 分发事件流程分析

在 Android11 InputReader分析 一文中分析到,InputReader将数据放入iq队列后,唤醒InputDispatcher线程,执行InputDispatcher的dispatchOnce方法 //frameworks\native\services\inputflinger\dispatcher\InputDispatcher.cpp void InputDispa…

Gradle基础笔记

配置镜像 修改 gradle>wrapper>gradle-wrapper.properties distributionUrlhttps://mirrors.aliyun.com/macports/distfiles/gradle/gradle-8.6-all.zip 配置父项目 使用 subprojects 编码问题处理 [compileJava, compileTestJava, javadoc].options.encoding ‘UTF-…

【js】将一维数组处理成树形数据并且实现模糊查询

项目中由于数据量不大,后台并未做处理,因此前端拿到返回的Table数据需要处理成树形数据再渲染到表格中 原始数据 const dataList[{"id": 44,"seedlingName": "测试2","seedlingType": "测试2",&quo…

k8s拉起一个pod底层是如何运行的

在Kubernetes中,当你尝试启动一个Pod时,底层的运行方式是由Kubelet服务来管理的。以下是Pod启动过程的简化概述: Kubernetes API Server接收到创建Pod的请求。 API Server将Pod的元数据存储到etcd中,以便于Pod的调度和跟踪。 Sc…

一文读懂开源大数据OLAP

企业需要从海量数据中提取有价值的信息,以支持决策制定和提高运营效率,数据已成为企业最宝贵的资产之一。OLAP(在线分析处理)技术,作为数据仓库解决方案的核心组成部分,提供了一种强大的工具,帮…

stm32_HAL_RTC_闹钟函数(F1只有一个闹钟)

HAL_RTC_SetAlarm: 功能:设置RTC闹钟。 参数: hrtc:指向RTC句柄结构的指针。sAlarm:指向包含闹钟配置的结构体的指针。Format:指定日期和时间的格式(12小时或24小时制)。返回值:状态…