zbus 到底是什么

zbus 到底是什么

本文字数:450  阅读时长:1分钟

访客数:加载中... | 阅读量:加载中...

zbus 是 Zephyr 里的软件总线:一个通道(channel)持有"最后一条消息",若干个观察者(observer)订阅它。发布方只管往通道里放,谁关心谁自己取,双方不用互相 include。

四类观察者

  • listener:在发布者上下文同步回调,必须极短,当 ISR 写。
  • async listener:丢到 workqueue 里跑。
  • subscriber:自己的线程 + msgq,只收到"通道变了"的通知。
  • message subscriber:线程 + FIFO,收到消息副本(依赖 net_buf 池)。

关键约束

通道和观察者是链接段里的全局符号,宏必须写在文件作用域;发布时锁住通道、memcpy 消息、按顺序回调,所以 listener 里不能阻塞。subscriber 只通知不排队,连发两次只会读到最新值——需要不丢消息就用 message subscriber 或 FIFO。

什么时候别用

高速字节流(用 k_pipe / k_msgq)、需要请求-响应配对的场景(用消息队列或协议层自己做 seq)。它适合的是"状态广播"和"事件解耦"。

本文由 GitHub Actions/服务器自动构建发布。