xtos_ spsc_ push
将一帧元数据和 channels 个纳伏样本复制到队列拥有的槽中。
本页目录
声明
#include <xtos/spsc.h>
int xtos_spsc_push(struct xtos_spsc_queue *queue,
const struct xtos_sample_frame *frame);参数
| 参数 | 类型 | 说明 |
|---|---|---|
| queue | struct xtos_spsc_queue * | 非 NULL 的已创建队列;由调用方保证生命周期。 |
| frame | const struct xtos_sample_frame * | 非 NULL;channels 必须匹配队列,timestamp_ns 必须非零。 |
返回值
成功返回 0;满队列或参数错误返回 -1。成功后源 frame 和 samples_nv 可复用。
错误
| errno | 条件 |
|---|---|
| EINVAL | queue、frame 或 frame->samples_nv 为 NULL,通道数不匹配,或 timestamp_ns 为 0。 |
| EAGAIN | 队列已满;新帧被拒绝,不覆盖已有帧。 |
注意事项
- 实现只检查源指针,不知道其长度;samples_nv 必须至少有 queue channels 个可读 int32。
- 这是严格 SPSC 操作;实现使用原子 head/tail 发布顺序,但不提供多生产者或多消费者仲裁。
- sequence、sample_rate_hz、quality_flags 不做语义或连续性校验。
示例
源码
本文按 OpenXTOS 提交 dd313955ad57542bcd2af8827157d1bbd0cf5e83 的头文件和实现编写。