20-消息队列

news2024/10/6 8:37:18

消息队列

任务与任务之间的通信,任务与中断之间的通信

消息队列是常用于任务之间通信的数据结构。通过消息队列符,任务和任务之间,任务与中断之间可以进行数据的通信。

消息队列的功能

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

FreeRTOS 中使用队列数据结构实现任务异步通信工作,具有如下特性:

●消息支持先进先出(FIFO——(往队尾发送消息)方式排队,支持异步读写工作方式。

●读写队列均支持超时机制

●消息支持后进先出(LIFO)方式排队,往队首发送消息(LIFO)。

●可以允许不同长度(不超过队列节点最大值)的任意类型消息。

●一个任务能够从任意一个消息队列接收和发送消息。

●多个任务能够从同一个消息队列接收和发送消息。

●当队列使用结束后,可以通过删除队列函数进行删除。

消息队列数据存储

通常队列采用先进先出(FIFO)的存储缓冲机制,也可以使用 LIFO 的存储缓冲,也就是后进先出。

数据发送到队列中会导致数据拷贝,也就是将要发送的数据拷贝到队列中,这就意味着在队列中存储的是数据的原始值,而不是原数据的引用(即只传递数据的指针),这个也叫做值传递

引用与值传递的区别(UCOS采用的引用传递,FreeRTOS采用的值传递)

当任务将一个数据发送到队列时,此时这个数据是拷贝进入队列的,在任务中,这个数据还可以发生改变,这并不会影响队列内已经存进去的值,数据改变后,可以重新传入队列

引用传递时将数据的指针传递进去,相当于把这个值得地址传入队列,这个值发生改变,队列内值也相应会发生改变

可以看下方图表表示

1、创建队列 (创建队列得时候需要指定队列得长度,以及每个数据得大小

2、向队列发送第一个消息

3、向队列发送第二个消息(x的值发生了改变,但是由于是值传递,数据拷贝,仍然可以将x的值传递进去

4、从队列中读取消息(任务读取消息时,可以将队列中的消息清除掉,此时,其他任务就无法读取到队列中的这个消息

消息队列的出队阻塞和入队阻塞

出队阻塞

当任务尝试从一个队列中读取消息的时候可以指定一个阻塞时间,这个阻塞时间就是当任务从队列中读取消息无效的时候任务阻塞的时间。

由此可以将出队阻塞分为三种情况(出队阻塞时在队列中没有数据的情况下发生)

  1. 不等待(阻塞时间设置为0)从队列中读取数据,有的话则读取,没有的话也不等待,任务不会进入阻塞态
  2. 等待一会(阻塞时间设置为0和最大值之间)从队列中读取数据,相当于如果队列没有数据,则等待一会(此时任务处于阻塞态),在等待的这段时间内完成了数据读取,则任务就从阻塞态变成就绪态 ,如果到了等待时间,消息队列还是没有消息,那就不等了,返回一个没等到消息的错误代码,然后取执行其他任务
  3. 一直等待(阻塞时间设置为最大值)如果队列中没有数据,任务就会一直等待,直到完成队列中数据的读取

入队阻塞

入队说的是向队列中发送消息,将消息加入到队列中。和出队阻塞一样,当一个任务向队列发送消息的话也可以设置阻塞时间。

入队阻塞也是分为三种情况(入队阻塞是在队列内数据满的情况下发生)

  1. 不等待   当消息队列中数据满的情况下,不等待,不进行数据的拷贝了,直接运行其他代码去
  2. 等一会    当消息队列满的情况下,等一会(此时处于阻塞态),在这段时间内,消息队列有空位置了,则进行入队,然后任务从阻塞态变成就绪态,如果过了等待时间,消息队列还是满的,那则输出一个错误代码,然后去执行其他的代码
  3. 一直等待   死磕到底,一定要把值传递进去

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

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

相关文章

C++第六弹---类与对象(三)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、类的6个默认成员函数 2、构造函数 2.1、概念 2.2、特性 3、析构函数 3.1、概念 3.2、特性 3.3、调用顺序 总结 1、类的6个默认成员函数…

【STM32 定时器(二)TIM 输入捕获PWM 总结】

STM32定时器之输入捕获总结 OC介绍PWM介绍PWM初始化代码部分开启时钟配置时基单元配置CCR配置GPIO配置复用和重定义功能 开启定时器代码实现 :实现呼吸灯 OC介绍 PWM介绍 PWM参数计算 分辨率越细,分的分量越精细,越稳定,假如它为…

HTML5实现一笔画游戏

HTML5实现一笔画游戏 一笔画问题 一笔画是图论科普中一个著名的问题,它起源于柯尼斯堡七桥问题科普。当时的东普鲁士哥尼斯堡城中有一条河,在这条河上有七座桥: 蓝色的代表河,这条河将城市分开成为四个区域,而七个橙…

华为OD机试 - 单词搜索,找到它 - 回溯(Java 2024 C卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题&a…

Tiktok/抖音旋转验证码识别代码

一、引言 在数字世界的飞速发展中,安全防护成为了一个不容忽视的课题。Tiktok/抖音,作为全球最大的短视频平台之一,每天都有数以亿计的用户活跃在其平台上。为了保护用户的账号安全,Tiktok/抖音引入了一种名为“旋转验证码”的安…

比TODESK好用的软件

比ToDesk更好用的软件:探索远程桌面的新选择 在远程桌面控制领域,ToDesk无疑是一款广受欢迎的软件。然而,随着技术的不断进步,市场上涌现出许多新的竞争者,它们在功能、性能和使用体验上都可能超越ToDesk。本文将介绍…

C语言向C++过渡的基础知识(三)

目录 auto类型变量(C11标准支持) auto关键字介绍 auto关键字的使用 auto关键字基本使用 auto关键字配合指针和引用 auto关键字不可以推导的场景 基于范围的for循环(C11标准支持) 基于范围的for循环基础使用 基于范围的fo…

语音识别:whisper部署服务器(远程访问,语音实时识别文字)

Whisper是OpenAI于2022年发布的一个开源深度学习模型,专门用于语音识别任务。它能够将音频转换成文字,支持多种语言的识别,包括但不限于英语、中文、西班牙语等。Whisper模型的特点是它在多种不同的音频条件下(如不同的背景噪声水…

【Linux杂货铺】进程的基本概念

目录 🌈前言🌈 📁进程的概念 📂描述进程-PCB 📂 查看进程 📂 查看正在运行的程序 📂杀死进程 📂通过系统调用获取进程标识符 📂通过系统调用创建进程 &#x1f…

HCIA——TCP协议详解

目录 1、TCP概念及协议头部格式 1.1TCP特点 1.2TCP协议协议头部格式 1.3字段进行介绍 1.3.1源端口和目的端口 1.3.2序号(seq) 1.3.3确认序号(ack) 1.3.4数据偏移 1.3.5标志位 1.3.6窗口 1.3.7校验和 1.3.8紧急指针 2、TCP的可靠性 2.1 TCP可靠性的保障 2.2排序机…

论文阅读_参数微调_P-tuning_v2

1 P-Tuning PLAINTEXT 1 2 3 4 5 6 7英文名称: GPT Understands, Too 中文名称: GPT也懂 链接: https://arxiv.org/abs/2103.10385 作者: Xiao Liu, Yanan Zheng, Zhengxiao Du, Ming Ding, Yujie Qian, Zhilin Yang, Jie Tang 机构: 清华大学, 麻省理工学院 日期: 2021-03-18…

unityprotobuf自动生成C#

Release Protocol Buffers v3.19.4 protocolbuffers/protobuf GitHub 导入Source code 里面的 csharp/src/Google.Protobuf 进入Unity 拷贝其他版本的 System.Runtime.CompilerServices.Unsafe进入工程 使用protoc-3.19.4-win32 里面的exe去编译proto文件为C# using Sys…

软件测试相关内容第四弹 -- 测试用例与测试分类

写在前:我们已经掌握了关于软件测试的相关内容,知道了基本的测试过程,在做了一段时间的基础测试,熟悉了相关的业务后,测试人员会进行测试用例的编写,在日常测试中,也需要补充测试用例到现有的案…

HCIP —— 交换 (VLAN)

VLAN --- 虚拟局域网 在 HCIA 中 ,已经学过交换机的一些基础配置,下面进行回顾一些简单的内容。 1.创建VLAN VLAN ID --- 区别和标识不同的VLAN 使用范围:0-4095 , 由12位二进制构成。 0 和 4095 作为 保留的VLAN。 …

静默安装OGG21.3微服务版本FOR ORACLE版本

静默安装OGG21.3微服务版本FOR ORACLE版本 silent install ogg21.3 for oracle 某度找来找去都没有找到一份可靠的静默安装OGG21.3微服务版本的案例,特别难受,为此将自己静默安装的步骤一步步贴出来分享给大家,请指点,谢谢。 至…

【生态适配】亚信安慧AntDB数据库与龙芯3C5000L完成兼容互认

日前,亚信安慧AntDB数据库系统V6.2在龙芯3C5000L平台上完成兼容性测试,功能与稳定性良好,被授予龙架构兼容互认证书。 图1:产品兼容性证明 随着“互联网”的纵深发展,数字技术创新成果与经济社会各领域深度融合&#…

电玩体验店怎么计时,佳易王ps5计时计费管理控制系统操作教程

电玩体验店怎么计时,佳易王ps5计时计费管理控制系统操作教程 一、前言 以下软件操作教程以 佳易王电玩计时计费管理系统软件V17.9为例说明 件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、电玩体验馆管理软件在计时的同时可以设置定时提醒&…

Java两周半速成之路(第十六天)

一、网络编程 1.概述: 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换 2.网络模型 3.网络参考模型图 4.网络通信三要素 4.1IP地址 InetAddress类的使用: 注意:通过API查看,此类没有构造方法,如…

Spring Boot Starter: 快速简明地创建Spring应用

Spring Boot Starter是Spring Boot的核心功能之一,它帮助开发人员快速简明地创建、配置和运行Spring应用。在本文中,我们将详细介绍Spring Boot Starter以及如何使用它创建一个Spring Boot应用。 文章目录 什么是Spring Boot Starter?为何使用Spring B…

jetson nano——编译一些包的网址导航,pyside2,qt(持续更新)

目录 1.PySide2下载地址2.tesserocr下载地址3.Qt下载地址4.OpenSSL官网5.latex编译器下载地址5.1MikTex5.2TeX Live 1.PySide2下载地址 https://download.qt.io/official_releases/QtForPython/pyside2/ 如下图: 2.tesserocr下载地址 https://github.com/simonflue…