我是靠谱客的博主 要减肥苗条,这篇文章主要介绍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流缓冲区   

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

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

函数:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#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.

一条消息包含多字节。

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

函数:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#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内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部