Zephyr内核——内核服务(数据传递)——管道

本文介绍了Zephyr内核中的管道服务,包括管道的概念、实现、写入、读取、冲洗等操作。管道是一种用于线程间同步传输字节流的内核对象,可配置环形缓冲区。文章通过示例代码展示了如何初始化、写入、读取和冲洗管道,建议在需要线程间数据流传输时使用,特别是对于大数据项,推荐发送指针以减少复制。
摘要由CSDN通过智能技术生成

管道

管道是一个内核对象,它允许一个线程向另一个线程发送一个字节流。管道可用于同步传输全部或部分的数据块。

概念

管道可以配置一个环形缓冲器,其保存已发送但尚未接收的数据;或者,管道可以没有环形缓冲器。

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

管道具有以下关键属性:

  • size表示管道的环形缓冲区的大小的大小。请注意,大小为0定义了一个没有环形缓冲区的管道。

管道必须初始化才能使用。该管道最初为空的。

数据通过线程同步地以全部或部分的方式发送到管道中。如果不能立即满足指定的最小字节数,则操作要么立即失败,要么尝试发送尽可能多的字节,然后等待,希望以后能够完成发送。已接受的数据可以复制到管道的环缓冲区,或者直接复制到等待的读取器。

数据是由一个线程从一个管道同步接收到的。如果不能立即满足指定的最小字节数,则操作要么立即失败,要么尝试接收尽可能多的字节,然后等待,希望以后能够完成接收。可接受的数据可以从管道的环缓冲区复制,也可以直接从等待的发送者)复制。

数据也可以通过线程从管道中刷新。冲洗既可以在整个管道上进行,也只能在其环形缓冲器上进行。冲洗整个管道相当于读取环形缓冲区中的所有信息,并等待被写入一个巨大的临时缓冲

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值