xtos_ bci_ get_ mmap_ buffer
按缓存的通道数和采样率估算映射长度,并返回只读共享 mmap 地址。
本页目录
声明
#include <xtos/bci.h>
void *xtos_bci_get_mmap_buffer(xtos_bci_session_t *session, size_t *size);参数
| 参数 | 类型 | 说明 |
|---|---|---|
| session | xtos_bci_session_t * | 非 NULL 会话句柄;会话拥有映射。 |
| size | size_t * | 可为 NULL;非 NULL 时成功写入映射字节数。 |
返回值
成功返回借用映射地址;失败返回 NULL,并设置 errno。size 失败时不保证写入。
错误
| errno | 条件 |
|---|---|
| EINVAL | session 为 NULL,或缓存信息导致计算出的映射长度为 0。 |
| ENOMEM/EACCES | mmap 无法建立映射或设备权限不足。 |
| system errno | mmap 失败时返回其 errno。 |
注意事项
- 首次调用估算 channels×sampling_rate×sizeof(float)×2;已映射时返回缓存地址,不重新计算。GET_INFO 失败会让缓存字段保持零值,估算长度也可能为 0,随后 mmap 失败;调用方必须先确认 get_info 得到的缓存信息有效。
- 公开实现直接进行多项 size_t 乘法,没有显式溢出检查;调用方应先验证通道数、采样率和乘积范围。
- 映射使用 PROT_READ|MAP_SHARED,由 destroy 解除;调用方不能 free 或 munmap。
- 公开接口没有 write/read position、稳定快照或消费者推进协议;仅凭指针不能构成完整 zero-copy 消费。
示例
源码
本文按 OpenXTOS 提交 dd313955ad57542bcd2af8827157d1bbd0cf5e83 的头文件和实现编写。