我是靠谱客的博主 要减肥苗条,最近开发中收集的这篇文章主要介绍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)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复