(五)消息队列

一、概念

队列又称消息队列,是一种常用于任务间通信的数据结构,队列可以在任务与任务间、中断与任务间传递信息,实现了任务接收来自于其他任务或中断的不定长度信息

二、常用函数

(1)xQueueCreate创建队列
(2)vQueueDelete删除队列,删除后所有消息都会被回收不能再使用
(3)xQueueSendxQueueSendToBackxQueueOverwrite从队列尾部入队
(4)xQueueSendToFront从队列首部入队
(5)xQueueSendFromISRxQueueSendToBackFromISRxQueueOverwriteFromISR从队列尾部入队(带中断保护)
(6)xQueueSendToFrontFromISR从队列首部入队(带中断保护)
(7)xQueueReceive出队并删除队列项
(8)xQueuePeek出队不删除队列项
(9)xQueueReceiveFromISR出队并删除队列项(带中断保护)
(10)xQueuePeekFromISR出队不删除队列项(带中断保护)

三、代码示例

#include "FreeRTOS.h"
#include "task.h"
#include "led.h"
#include "queue.h"static void vAppInitTask(void* pParam);
static void task1(void* pParam);
static void task2(void* pParam);static TaskHandle_t handler1;
static TaskHandle_t handler2;
static TaskHandle_t appHandler;QueueHandle_t testQueueHandler;//主函数
int main(void)
{  //初始化硬件led_init();BaseType_t xReturn;xReturn = xTaskCreate(vAppInitTask,         //任务函数入口"vAppInitTask",         //任务名称512,                    //任务堆栈大小NULL,                   //传递参数2,                      //任务优先级&appHandler             //任务句柄);if(pdPASS == xReturn){vTaskStartScheduler();      //开启任务调度器}while(1);
}//APP任务
void vAppInitTask(void* pParam)
{taskENTER_CRITICAL();//进入临界区//创建队列testQueueHandler = xQueueCreate(4,             //消息队列长度4               //队列中每个元素的大小);if(NULL != testQueueHandler){}//由于app任务创建成功后便开启了调度器,于是下边创建的任务创建后便会立即执行xTaskCreate(task2,           //任务函数入口"task2",         //任务名称512,                //任务堆栈大小NULL,               //传递参数2,                  //任务优先级&handler2         //任务句柄);xTaskCreate(task1,           //任务函数入口"task1",         //任务名称512,                //任务堆栈大小NULL,               //传递参数2,                  //任务优先级&handler1         //任务句柄);vTaskDelete(appHandler);taskEXIT_CRITICAL();//退出临界区
}//任务1接收队列消息
void task1(void* pParam)
{uint32_t recv;xQueueReceive(testQueueHandler,&recv,0);if(recv==1){open();}while(1);
}//任务2发送消息到队列
void task2(void* pParam)
{uint32_t data=1;xQueueSend(testQueueHandler,        //队列句柄&data,                  //入队数据0);                     //等待时间while(1);
}

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

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

相关文章

基于深度学习的唇语识别系统的设计与实现

概要 人工智能作为三大工程之一,从上个世纪至今仍然活跃于各个行业的研究与应用之中,应时代的热潮方向,本 课题主要针对深度学习技术应用于唇语识别当中,实现词语唇语的翻译功能。唇语识别在图像处理中一直是一个富 有挑战性的课题…

C语言基础学习

1 extern 在C语言中,关键字extern用于声明一个变量或函数是在其他文件或模块中定义的。它告诉编译器变量或函数是在其他地方被定义的,而不是在当前文件中。这样做可以使多个文件共享同一个变量或函数,而不需要在每个文件中都重新定义一次。 …

力扣59. 螺旋矩阵 II

思路:此题思路就是绕圈遍历,全靠条件处理技巧,重点要清楚的就是循环不变量:左闭右开(即拐弯处的一个数,留给第二行处理) 以下是代码随想录的作者的一张图片,每次for循环,…

使用三种方式读取文本文件

文章目录 🍔需求🎄思路⭐代码⭐效果🛸注意 在 Java 中,读取文件通常涉及以下几个步骤: 打开文件:首先需要创建一个文件对象,表示要读取的文件。这个文件对象可以包含文件路径、文件名等信息。 …

使用canvas实现图纸标记及回显

图纸 图纸标记后的效果图 最近做的一个qms项目里面,需要前端在图纸上实现标记及标记后的内容还要能够回显,然后后端通过标记的点,去读取标记图纸的内容,如一些公式、数据之类的,目前实现的功能有 在图纸上面进行矩形…

Mysql 索引、锁与MVCC等相关知识点

文章目录 Mysql锁的类型锁使用MVCC快照读和当前读读视图【Read View】串行化的解决 索引类型存储方式区分逻辑区分实际使用区分索引失效情况 索引建立规范SQL编写规范exlpain字段解析ACID的原理日志引擎慢SQL整合SpringBoot博客记录 Mysql锁的类型 MySQL中有哪些锁&#xff1a…

Flutter:构建美观应用的跨平台方案

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

C#理解进程、线程和任务

一、进程、线程和任务 C# 中的进程、线程和任务时,通常涉及到多任务处理、并行编程和异步操作。下面我将详细解释这三个概念: 1.进程 定义:进程是正在运行的程序的实例。每个进程都有自己的内存空间、系统资源和执行状态。C#中的表示&…

【软考】SMTP与SNMP

目录 1. SMTP2. SNMP 1. SMTP 1.简单邮件传输协议(Simple Mail Transfer Protocol)2.SMTP主要负责底层的邮件系统如何将邮件从一台机器发送至另外一台机器3.该协议工作在TCP协议的25号端口4.小记:Transfer与Transmission都有T 2. SNMP 1.简…

C#创建第一个PIESDK模版的项目

目录 环境配置创建项目方式 环境配置 1软件安装 通过安装光盘或者U盘等介质读取PIE软件的安装程序和使用文档。程序安装过程比较简单,软件本身不借助与任何第三方程序,直接双击安装程序【PIESDK.Net_V6.3_Windows_X64.exe】安装文件,即可安装…

尚硅谷vue全家桶(上)

vue2 简介第一天第二天 第三天第四天第五天 第六天第七天第八天 第九天 网课链接(半个月拿下) 简介 需要提前会的东西 中文文档链接点下面 vue.js 要会查文档用API 第一天 清除提示1 再文档中下载开发版本浏览器安装vue devtools插件 打开允许访问URL…

cookies为什么会有csrf风险,为什么token可以避免

CSRF 利用的是网站对用户网页浏览器的信任。 伪造请求(一般是一个非法链接): 链接伪造了目的性请求参数,因为地址需要同源,所以不会改。 Cookie 是通过浏览器将服务器返回的数据保存在本地的一小块数据(一般小于4kb)。当浏览器发…

各位朋友我回答一个问题大家帮忙看看是否对错!

转载:《发布一个简单的C语言的问题,有大牛可以前往指导一下》 简单的C字符串问题:编写如下面要求一个函数,那个最好呢?求各位出出点子看看如何优化。_编程语言-CSDN问答 当我认为问题最优时候我将进行开帖总结与致谢&#xff0c…

SpringBoot 中使用自定义参数解析器修改请求对象

SpringBoot 中使用自定义参数解析器修改请求对象 在 SpringBoot 应用中,有时我们需要在控制器方法执行之前对请求对象进行修改。自定义参数解析器提供了一种灵活的方式来实现这一需求。 1. 创建自定义参数解析器 首先,我们需要创建一个自定义参数解析…

[NCNN学习笔记]-1

1、前言 本次继续学习NCNN,希望能够坚持,往期学习NCNN的链接如下。 [NCNN学习笔记]-0 2、学习内容 2.1、batchnorm_arm.cpp 这个章节学习NCNN中batchnorm在NEON上的实现。batchnorm的学习可参考链接:https://zhuanlan.zhihu.com/p/93643523 在NCNN…

【C语言】字符函数与字符串函数以及内存函数 { 超详细攻略,一篇学会 }

今日分享:字符、字符串函数和内存函数 内存函数就是对内存进行操作的函数 字符串函数就是对字符串进行操作的函数 字符函数就是对字符进行操作的函数 str前缀的函数是字符串函数,头文件string.h mem前缀的函数是内存函数,头文件stdlib.h 字符…

C#开发五子棋游戏:从新手到高手的编程之旅

C#开发五子棋游戏:从新手到高手的编程之旅 目录 一、引言 二、项目规划与设计思路 三、棋盘与棋子的数据模型构建 四、交互式用户界面设计 五、核心游戏逻辑实现 一、引言 五子棋,作为一种古老的策略型棋类游戏,在全球拥有广泛的爱好者…

25考研数据结构复习·3.3.2栈和队列的应用——表达式求值

三种算术表达式 中缀表达式 ((15/(7-(11)))*3)-(2(11)) 由三个部分组成:操作数、运算符、界限符 运算符在两个操作数中间:ab;ab-c;ab-c*d ❗后缀表达式 逆波兰表达式 运算符在两个操作数后面:ab;abc-或ab…

python知识点总结(二)

这里写目录标题 1、什么是解释性语言,什么是编译性语言?2、说说中作用域是怎么划分的3、type和isinstance方法的区别4、浅拷贝和深拷贝5、python中变量在内存中存储方式6、python中的封装、继承、多态7、python中内存管理机制是怎么样的?8、简…

旋转中心 机械手抓料方式

一、为什么要计算旋转中心? 机器视觉——旋转中心的标定_旋转标定-CSDN博客 在机械手抓料的时候传送带上过来的料可能是各个角度的,不同的位置,这样如果我们没有做好机械手标定的话很难抓取,因此我们要做旋转中和和机械手TCP标定…