我是靠谱客的博主 要减肥苗条,最近开发中收集的这篇文章主要介绍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()

最后

以上就是要减肥苗条为你收集整理的FreeRTOS三种数据结构区别(StreamBuffer,MessageBuffer,Queue)的全部内容,希望文章能够帮你解决FreeRTOS三种数据结构区别(StreamBuffer,MessageBuffer,Queue)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部