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

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()

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值