Zephyr内核——数据结构——环缓冲区

环缓冲区

环状缓冲区是一种循环缓冲区,其内容以先入先出的顺序存储。

对于应用程序需要实现数据的异步“流”复制的情况,Zephyr提供了一个结构体ring_buf抽象来管理内存共享缓冲区内外的此类数据的副本。

支持以下两种内容数据模式:

  • 字节模式:原始字节可以被加入排队和取消排队。
  • 数据项模式:多个带有元数据的32位字数据项可以以最多1020字节的块从环缓冲区中排队和退出排队。每个数据项还具有两个相关的元数据值:一个类型标识符和一个16位整数值,这两者都是特定于应用程序的。

虽然底层数据结构是相同的,但在单个环缓冲区实例上混合这两种模式是不合法的。使用字节计数初始化的环缓冲区只能与“字节”API一起使用,使用单词计数初始化的环缓冲区必须使用“项”调用。

概念

可以定义任意数量的环缓冲器(仅受可用RAM的限制)。每个环缓冲区都由其内存地址引用。

环形缓冲区具有以下关键属性:

  • 一个字节或32位字的数据缓冲区。数据缓冲区包含已添加到环缓冲区但尚未删除的原始字节或32位字。
  • 数据缓冲区大小,以字节或32字节字为单位。这将控制环缓冲区可以保存的最大数据量(包括可能的元数据值)。
  • 环形缓冲区必须经过初始化后才能使用。这将将其数据缓冲区设置为空。

结构ring_buf可以放置在用户可访问内存中的任何位置,并且在使用之前必须使用ring_buf_init()ring_buf_element_init()进行初始化。这必须提供一个用户控制的内存区域,以便作为缓冲区本身使用。请仔细注意,传递的缓冲区大小的单位&#x

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值