FreeRTOS三种数据结构区别(StreamBuffer,MessageBuffer,Queue)

2023-05-16

Queue队列是最基本的数据结构,在FreeRTOS v10.0后提供了另外两种高级数据结构为Streambuffer和MessageBuffer,称为流式缓冲区和消息缓冲区。

FreeRTOS - 嵌入式系统开源 - FreeRTOS xQueueCreate() API 函数描述

FreeRTOS xStreamBufferCreate() API 文档

FreeRTOS xMessageBufferCreate() API 文档

1. Queue队列                   

     队列长度固定,所以占用空间相对较大。

    比如:100条信息 一条信息512字节 那么就会占用512*100=51KB数据

2. StreamBuffer流缓冲区   

    队列长度不固定,类似于环形队列, 以字节为单位存储。

    针对数据有长有短,这种类型就比较适合

函数:

#include "stream_buffer.h"

xStreamBufferCreate()
xStreamBufferCreateStatic()
xStreamBufferSend()
xStreamBufferSendFromISR()
xStreamBufferReceive()
vStreamBufferDelete()
xStreamBufferIsFull()
xStreamBufferIsEmpty()
xStreamBufferReset()
xStreamBufferSpacesAvailable()
xStreamBufferBytesAvailable()
xStreamBufferSetTriggerLevel()
xStreamBufferSendCompletedFromISR()
xStreamBufferReceiveCompletedFromISR()

xStreamBufferGenericCreate()
xStreamBufferGenericCreateStatic()
xStreamBufferNextMessageLengthBytes()

例如:第一条 10B 第二条 100B 第三条 30B  那么三条就是10+100+30 = 140B

如果采用第一种方式 就是512B*3

3. MessageBuffer 消息缓冲区    

消息缓冲区是在 2 StreamBuffer流式缓冲区的基础上实现的,其进一步针对“消息”进行设计改进。MessageBuffer每一条消息的写入增加了一个字节用来表示该条消息的长度。读取时需要一次性读出至少一条消息,否则会返回 0.

一条消息包含多字节。

 所以第三种方式 也比较省空间,在没有时,还有环队代替它。

函数:

#include "message_buffer.h"

xMessageBufferCreate()
xMessageBufferCreateStatic()
xMessageBufferSend()
xMessageBufferSendFromISR()
xMessageBufferReceive()
xMessageBufferReceiveFromISR()
vMessageBufferDelete()
xMessageBufferIsFull()
xMessageBufferIsEmpty()
xMessageBufferReset()
xMessageBufferSpaceAvailable()
xMessageBufferSpacesAvailable()
xMessageBufferNextLengthBytes()
xMessageBufferSendCompletedFromISR()
xMessageBufferReceiveCompletedFromISR()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FreeRTOS三种数据结构区别(StreamBuffer,MessageBuffer,Queue) 的相关文章

  • JMS QueueSender 线程安全吗?

    我想在多线程环境中使用 QueueSender Is QueueSender send 线程安全 No a MessageProducer QueueSender不是线程安全的 或者更具体地说 Session http java sun c
  • 如何在Mule中创建独占队列消费者?

    在 ActiveMQ 中 您可以为队列配置独占消费者 例如 Queue Name Here consumer exclusive true 如何在 Mule 中配置像上面这样的独占消费者 您需要对队列名称进行 URL 编码 因为 Mule
  • Node.js 中的作业队列

    我正在node js 中寻找一个可以由php 调用的作业队列管理器 这是一个需要发送电子邮件 创建 pdf 文件等的 Web 应用程序 我想对这些应用程序执行异步 php 进程 流程示例 用户请求 php 页面 Php调用作业队列管理器并添
  • Python - 使用线程或队列迭代调用函数的 for 循环

    我对 python 相当陌生 正在制作一个脚本 允许将其他程序的点云数据引入 Autodesk Maya 我的脚本运行良好 但我想做的是让它更快 我有一个 for 循环 它遍历编号文件的列表 IE datafile001 txt dataf
  • java队列中Queue.Poll()返回null但Queue.size()>0

    My code while Memo qRcv size gt 0 MessageReceived msg Memo qRcv poll 然后我得到了 2014 03 01 11 09 36 DEBUG Thread 16 threadQu
  • 如何在运行时创建 celery 队列,以便工作人员拾取发送到该队列的任务?

    我正在使用 django 1 4 celery 3 0 rabbitmq 为了描述该问题 我的系统中有许多内容网络 并且我需要一个队列来处理与每个网络相关的任务 然而 内容是在系统运行时动态创建的 因此我需要动态创建队列并让现有工作人员开始
  • 使用 Celery(RabbitMQ、Django)检索队列长度

    我在 django 项目中使用 Celery 我的代理是 RabbitMQ 我想检索队列的长度 我浏览了 Celery 的代码 但没有找到执行此操作的工具 我在 stackoverflow 上发现了这个问题 从客户端检查 RabbitMQ
  • 使用 Javascript 进行速率限制并将 ajax 调用排队为每 15 秒一次

    我有一个应用程序 每次用户执行某些操作时都会自动发送推文 如果用户愿意 可以轻松地每秒执行一次该操作 Twitter 的速率限制表示 它关注 15 分钟内发生了多少条推文 从技术上讲 我认为我总是低于 15 分钟标记 但 Twitter 似
  • 使用java工具的类似Sidekiq的队列?

    我想要一个工作队列 其行为几乎与 ruby 的 sidekiq 完全相同 它不need使用 Redis 但它可以 我只是不能使用 ruby 甚至不能使用 Jruby 基本上 我希望能够创建使用某些参数运行的作业 并且工作池执行作业 工作人员
  • 使用一个或多个标准 FIFO 队列实现延迟队列 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 延迟队列是一种队列 其中每条消息都有
  • 删除队列对象数组

    我正在研究一个包含数组的对象queues数组长度在调用构造函数之前才确定 基本上看起来像下面这样 include
  • 如何获取队列中的第 n 个项目?

    我的应用程序中有许多队列和优先级队列 我想轻松访问这些队列中的第 n 个项目 但没有看到使用 API 实现此目的的简单方法 我想我可以创建一个Iterator并迭代到第 n 个元素或使用toArray index 但似乎应该有一个更简单的方
  • OutOfRangeError(请参阅上面的回溯):FIFOQueue '_1_batch/fifo_queue' 已关闭并且元素不足(请求 32,当前大小 0)

    我在使用队列中张量流读取图像时遇到问题 请让我知道我犯了什么错误 下面是代码 import tensorflow as tf slim tf contrib slim from tensorflow python framework imp
  • Laravel:运行队列:在 Windows Azure Web App 上连续监听

    我觉得问这个问题有点傻 但我似乎无法在互联网上找到这个问题的答案 经过几个小时的搜索后 我发现在 Linux 服务器上 您使用 Supervisor 在您的网站上连续运行 php artisanqueue listen 无论有或没有守护进程
  • java中队列的实现

    在 Java 中实现队列是一个非常常见的面试问题 我在网上冲浪 看到了许多实现 他们做了一些奇特的事情 比如实现队列接口和编写自己的addLast and removeFirst 方法 我的问题是我不能使用LinkedList 类并使用其预
  • 在 PL/SQL 中创建队列订阅者的语法是什么?

    我正在尝试创建一个队列和一个在消息排队时触发的回调 但我无法触发回调 我究竟做错了什么 我有一个将消息入队的触发器 我可以在队列消息表上看到它 我可以手动将其出队并处理它 我只是无法在入队时触发回调 BEGIN DBMS AQADM CRE
  • 如何将队列引用传递给 pool.map_async() 管理的函数?

    我想要一个长时间运行的进程通过队列 或类似的东西 返回其进度 我将其提供给进度栏对话框 当过程完成时我还需要结果 这里的测试示例失败并显示RuntimeError Queue objects should only be shared be
  • Firebase/Firestore 事务是否会创建内部队列?

    我想知道交易是否 https firebase google com docs firestore manage data transactions https firebase google com docs firestore mana
  • 线程安全的异步字节队列

    我有一个回调方法 只要有新数据可用 就会调用该方法 public delegate void DataCallback byte buffer int offset int count 我想将其包装在一个实现与此类似的接口的类中 publi
  • 使用 Matplotlib、PyQt 和 Threading 进行实时绘图导致 python 崩溃

    我一直在努力研究我的 Python 应用程序 但找不到任何答案 我有 PyQT GUI 应用程序 它使用 Matplotlib 小部件 GUI 启动一个新线程来处理 mpl 小部件的绘图 恐怕我现在通过从另一个线程访问 matplotlib

随机推荐

  • Layui上传系列之二(多文件分块上传优化实现)

    接下来 xff0c 就要实现layui的uploader分块上传了 xff0c 在官网上没有提到分块上传 xff0c 倒是有一个多文件选择后 xff0c 显示文件列表的例子 目录 现状分析 我的做法 功能优化 上代码了 现状分析 对于我们能
  • tigervnc+noVNC远程使用RViz

    写在前面 遇到了远程桌面访问ubuntu系统并使用RViz的需要 xff0c 试了常用的vnc4server xff0c 在没有外接显示器的情况下 xff0c vnc4server需要虚拟一个显示器出来 xff0c 虚拟显示器可以使用Xvf
  • VINS-Mono融合轮式编码器和GPS(三):后端优化

    VINS Mono融合轮式编码器和GPS xff08 三 xff09 xff1a 后端优化 开篇介绍理论目标函数IMU约束1 残差2 优化变量3 Jacobian4 协方差 实践配合代码查看 开篇 项目地址VINS GPS Wheel xf
  • ROS-Gazebo (一):关于Gazebo无法加载模型,长时间卡在开始界面的问题解决方法

    在使用ROS Gazebo的过程中首先遇到的问题就是长时间加载不出模型 来 通常的解决方法是 从官方模型库下载号所有的基本模型 然后解压到 gazebo models文件夹里面就可以了 具体的下载地址和详细的操作方式可以 百度或者谷歌 34
  • 用SST89E516RD自制51单片机仿真器

    原文网址 xff1a http www1 eccn com tech06 te074653 asp 用SST89E516RD自制51单片机仿真器 文 xff0f 吴汉清 单片机实验和开发中最重要的一个环节就是程序的调试 xff0c 在业余条
  • Latex (一) 安装和环境变量的设置

    一 安装 Tex有很多不同的版本 xff0c 很多人喜欢用ctex xff0c 但是最推荐是官方版本Texlive 搜了很多资料 xff0c 一般windows的话 xff0c 可以将Tex live 43 Tex studio作为标配 x
  • KITTI 数据集 参数—— tracking devkit中的rotation_y和alpha角

    根据devkit中的readme txt和cs overview pdf的描述以及根据通过对数据集做的小实验总结的 xff0c 如果过有错误的地方欢迎指正 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • 拯救者Y7000P 安装Ubuntu16.04问题解决

    先列一下问题 xff1a 1 wifi开不来了 xff1b 2 触摸板没法用 3 休眠后打不开 目前1 3 xff0c 解决了 xff0c 但是2依然没法解决 xff0c 不过问题不大 xff0c 大不了用鼠标 首先 xff0c 问题的原因
  • VSCode python调试库代码以及添加相关扩展支持opencv

    调试python 代码的时候可以再launch json 文件中添加 justMycode 34 false 来调试安装的包的代码 由于opencv 底层调用的C xff0c 所以如果要在代码提示中正确提示可能要安装额外插件 xff1a 比
  • vscode python包的引用一些问题

    个人使用vscode碰到的一些python包的引用问题以及尝试解决的一些办法 xff0c 可能只适用我自己的情况 项目目录大概如下 xff1a lib是根目录下的一个文件夹 xff0c 里面每个文件夹都是一个python 包 xff0c 都
  • MATLAB 矩阵的化简rref()函数

    在用MATLAB求解线性方程组的时候 xff0c 可以使用 rref 函数对矩阵进行化简 xff0c 从而很方便直观的得到原方程的解 xff0c 举一个简单的例子 xff1a 解下列线性方程组 则用MATLAB的rref函数解上述方程组的代
  • MATLAB求符号函数的函数值的方法

    在MATLAB中定义函数的方法有许多种 xff0c 比较常用的一种是定义符号变量 x 和 y 举一个简单的例子 xff1a 对函数 y 61 x 2 用上述方法的MATLAB语言如下 xff1a syms x y y 61 x 2 要想画出
  • C++寻找数组最大值和最小值

    寻找数组中的最大最小值 include lt iostream gt using namespace std include lt algorithm gt int main int n cin gt gt n int p 61 new i
  • Excel如何同时查找多个数据

    在使用多个excel表的时候 xff0c 有时需要在一个表中查找另一个表中的某些信息 xff0c 怎样能一步到位 xff0c 将所有要查找的信息一次找出来而不是一个个的Ctrl 43 F xff1f 这是前几天帮辅导员老师统计新生的数据时遇
  • python tkinter 全部组件(widget)及事件类型(event)一览

    对于一个简单的GUI程序设计来说 xff0c 我觉得无非就是三个要素 xff0c widget xff08 部件 xff09 xff0c layout xff08 布局 xff09 xff0c event xff08 事件的响应 xff09
  • DS18B20 1-WIRE ROM搜索算法详解

    转自 xff1a http blog sina com cn s blog 57ad1bd20102uxxw html 1 WIRE 搜索算法详解 xff08 1 xff09 0 前言 美信公司 xff08 http www maximin
  • 关于python tkinter 多线程依然无响应问题

    今天解决了一个GUI程序的多线程问题 因为GUI程序在执行高IO操作的时候容易出现假死和无响应的状态 xff0c 所以需要用到多线程 但我的程序开了线程之后依然是无响应状态 几次尝试 xff0c 终于找到问题所在 1 首先 xff0c 我的
  • Ubuntu内核的查看、更新、卸载、取消及启用自动更新

    1 查看当前内核版本 xff1a uname r 2 升级内核 xff1a sudo apt get update sudo apt cache search linux image 查看可用内核 在选择合适的内核后 xff0c sudo
  • 孤立森林(Isolation Forest)

    背景 现有的异常检测方法主要是通过对正常样本的描述 xff0c 给出一个正常样本在特征空间中的区域 xff0c 对于不在这个区域中的样本 xff0c 视为异常 这些方法的主要缺点是 xff0c 异常检测器只会对正常样本的描述做优化 xff0
  • FreeRTOS三种数据结构区别(StreamBuffer,MessageBuffer,Queue)

    Queue队列是最基本的数据结构 xff0c 在FreeRTOS v10 0后提供了另外两种高级数据结构为Streambuffer和MessageBuffer xff0c 称为流式缓冲区和消息缓冲区 FreeRTOS 嵌入式系统开源 Fre