环缓冲区
环状缓冲区是一种循环缓冲区,其内容以先入先出的顺序存储。
对于应用程序需要实现数据的异步“流”复制的情况,Zephyr提供了一个结构体ring_buf
抽象来管理内存共享缓冲区内外的此类数据的副本。
支持以下两种内容数据模式:
- 字节模式:原始字节可以被加入排队和取消排队。
- 数据项模式:多个带有元数据的32位字数据项可以以最多1020字节的块从环缓冲区中排队和退出排队。每个数据项还具有两个相关的元数据值:一个类型标识符和一个16位整数值,这两者都是特定于应用程序的。
虽然底层数据结构是相同的,但在单个环缓冲区实例上混合这两种模式是不合法的。使用字节计数初始化的环缓冲区只能与“字节”API一起使用,使用单词计数初始化的环缓冲区必须使用“项”调用。
概念
可以定义任意数量的环缓冲器(仅受可用RAM的限制)。每个环缓冲区都由其内存地址引用。
环形缓冲区具有以下关键属性:
- 一个字节或32位字的数据缓冲区。数据缓冲区包含已添加到环缓冲区但尚未删除的原始字节或32位字。
- 数据缓冲区大小,以字节或32字节字为单位。这将控制环缓冲区可以保存的最大数据量(包括可能的元数据值)。
- 环形缓冲区必须经过初始化后才能使用。这将将其数据缓冲区设置为空。
结构ring_buf
可以放置在用户可访问内存中的任何位置,并且在使用之前必须使用ring_buf_init()
或ring_buf_element_init()
进行初始化。这必须提供一个用户控制的内存区域,以便作为缓冲区本身使用。请仔细注意,传递的缓冲区大小的单位&#x