XWOS API
4.0
XWOS C/C++ API参考手册
|
模块 | |
XWCQ C++ Lib | |
结构体 | |
struct | xwcq |
循环队列对象 更多... | |
struct | xwcq_d |
循环队列对象描述符 更多... | |
宏定义 | |
#define | XWCQ_DEF_MEMPOOL(name, slotsize, slotnum) __xwcc_alignl1cache xwu8_t name[(slotsize) * (slotnum)] |
定义循环队列缓冲区 | |
函数 | |
xwer_t | xwcq_init (struct xwcq *cq, xwsz_t slotsize, xwsz_t slotnum, xwu8_t *mem) |
XWCQ API:初始化循环队列 | |
xwer_t | xwcq_fini (struct xwcq *cq) |
XWCQ API:销毁循环队列对象 | |
xwsq_t | xwcq_get_tik (struct xwcq *cq) |
XWCQ API:获取循环队列对象的标签 | |
static xwcq_d | xwcq_get_d (struct xwcq *cq) |
XWCQ API:获取循环队列对象描述符 | |
xwer_t | xwcq_acquire (xwcq_d cqd) |
XWCQ API:检查循环队列对象的标签并增加引用计数 | |
xwer_t | xwcq_release (xwcq_d cqd) |
XWCQ API:检查循环队列对象的标签并增加引用计数 | |
xwer_t | xwcq_grab (struct xwcq *cq) |
XWCQ API:增加循环队列对象的引用计数 | |
xwer_t | xwcq_put (struct xwcq *cq) |
XWCQ API:减少循环队列对象的引用计数 | |
xwer_t | xwcq_eq (struct xwcq *cq, const xwu8_t *data, xwsz_t *size) |
XWCQ API:将数据发送到循环队列的 尾端 (入队,EnQueue) | |
xwer_t | xwcq_jq (struct xwcq *cq, const xwu8_t *data, xwsz_t *size) |
XWCQ API:将数据发送循环队列的 首端 (插队,Jump the Queue) | |
xwer_t | xwcq_dq (struct xwcq *cq, xwu8_t *data, xwsz_t *size) |
XWCQ API: 等待从循环队列的 首端 接收数据 (离队,DeQueue) | |
xwer_t | xwcq_dq_to (struct xwcq *cq, xwu8_t *data, xwsz_t *size, xwtm_t to) |
XWCQ API: 限时等待从循环队列的 首端 接收数据 (离队,DeQueue) | |
xwer_t | xwcq_dq_unintr (struct xwcq *cq, xwu8_t *data, xwsz_t *size) |
XWCQ API: 等待从循环队列的 首端 接收数据 (离队,DeQueue), 并且等待不可被中断 | |
xwer_t | xwcq_trydq (struct xwcq *cq, xwu8_t *data, xwsz_t *size) |
XWCQ API: 尝试从循环队列的 首端 接收数据 (离队,DeQueue) | |
xwer_t | xwcq_rq (struct xwcq *cq, xwu8_t *data, xwsz_t *size) |
XWCQ API: 等待从循环队列的 尾端 接收数据 (反向离队,Reversely deQueue) | |
xwer_t | xwcq_rq_to (struct xwcq *cq, xwu8_t *data, xwsz_t *size, xwtm_t to) |
XWCQ API: 限时等待从循环队列的 尾端 接收数据 (反向离队,Reversely deQueue) | |
xwer_t | xwcq_rq_unintr (struct xwcq *cq, xwu8_t *data, xwsz_t *size) |
XWCQ API: 等待从循环队列的 尾端 接收数据 (反向离队,Reversely deQueue), 并且等待不可被中断 | |
xwer_t | xwcq_tryrq (struct xwcq *cq, xwu8_t *data, xwsz_t *size) |
XWCQ API: 尝试从循环队列的 尾端 接收数据 (反向离队,Reversely deQueue) | |
xwer_t | xwcq_pfq (struct xwcq *cq, xwu8_t *data, xwsz_t *size) |
XWCQ API: 等待从循环队列 头端 拷贝数据 (Peek at the Front of Queue) | |
xwer_t | xwcq_pfq_to (struct xwcq *cq, xwu8_t *data, xwsz_t *size, xwtm_t to) |
XWCQ API: 限时等待从循环队列 头端 拷贝数据 (Peek at the Front of Queue) | |
xwer_t | xwcq_pfq_unintr (struct xwcq *cq, xwu8_t *data, xwsz_t *size) |
XWCQ API: 等待从循环队列 头端 拷贝数据 (Peek at the Front of Queue), 并且等待不可被中断 | |
xwer_t | xwcq_trypfq (struct xwcq *cq, xwu8_t *data, xwsz_t *size) |
XWCQ API: 尝试从循环队列 头端 拷贝数据 (Peek at the Front of Queue) | |
xwer_t | xwcq_prq (struct xwcq *cq, xwu8_t *data, xwsz_t *size) |
XWCQ API: 等待从循环队列 尾端 拷贝数据 (Peek at the Rear of Queue) | |
xwer_t | xwcq_prq_to (struct xwcq *cq, xwu8_t *data, xwsz_t *size, xwtm_t to) |
XWCQ API: 限时等待从循环队列 尾端 拷贝数据 (Peek at the Rear of Queue) | |
xwer_t | xwcq_prq_unintr (struct xwcq *cq, xwu8_t *data, xwsz_t *size) |
XWCQ API: 等待从循环队列 尾端 拷贝数据 (Peek at the Rear of Queue), 并且等待不可被中断 | |
xwer_t | xwcq_tryprq (struct xwcq *cq, xwu8_t *data, xwsz_t *size) |
XWCQ API: 尝试从循环队列 尾端 拷贝数据 (Peek at the Rear of Queue) | |
xwer_t | xwcq_flush (struct xwcq *cq) |
XWCQ API: 清空循环队列 | |
xwer_t | xwcq_get_capacity (struct xwcq *cq, xwsz_t *capbuf) |
XWCQ API: 获取循环队列的容量 | |
xwer_t | xwcq_get_size (struct xwcq *cq, xwsz_t *szbuf) |
XWCQ API: 获取循环队列的单个数据槽的大小 | |
xwer_t | xwcq_get_availability (struct xwcq *cq, xwsz_t *avbbuf) |
XWCQ API: 获取循环队列中有效数据槽的数量 | |
xwer_t | xwcq_bind (struct xwcq *cq, struct xwos_sel *sel, xwsq_t pos) |
XWOS API:绑定循环队列对象到信号选择器 | |
xwer_t | xwcq_unbind (struct xwcq *cq, struct xwos_sel *sel) |
XWOS API:从信号选择器上解绑循环队列对象 | |
技术参考手册: 循环队列
xwcq_init()
:初始化xwcq_fini()
:销毁XWOS并未提供基于动态内存管理的创建与删除CAPI。
xwcq_dq()
:等待消息,只能在 线程 上下文使用xwcq_dq_to()
:限时等待消息,只能在 线程 上下文使用xwcq_dq_unintr()
:不可中断地等待消息,只能在 线程 上下文使用xwcq_trydq()
:尝试获取消息,可在 任意 上下文使用xwcq_rq()
:等待消息,只能在 线程 上下文使用xwcq_rq_to()
:限时等待消息,只能在 线程 上下文使用xwcq_rq_unintr()
:不可中断地等待消息,只能在 线程 上下文使用xwcq_tryrq()
:尝试获取消息,可在 任意 上下文使用xwcq_pfq()
:等待消息,只能在 线程 上下文使用xwcq_pfq_to()
:限时等待消息,只能在 线程 上下文使用xwcq_pfq_unintr()
:不可中断地等待消息,只能在 线程 上下文使用xwcq_trypfq()
:尝试获取消息,可在 任意 上下文使用xwcq_prq()
:等待消息,只能在 线程 上下文使用xwcq_prq_to()
:限时等待消息,只能在 线程 上下文使用xwcq_prq_unintr()
:不可中断地等待消息,只能在 线程 上下文使用xwcq_tryprq()
:尝试获取消息,可在 任意 上下文使用xwcq_flush()
:将循环队列恢复到初始化状态xwcq_get_capacity()
:获取循环队列的容量xwcq_get_size()
:获取单个数据槽的大小xwcq_get_availability()
:获取循环队列中有效数据槽的数量xwcq_grab()
:增加引用计数xwcq_put()
:减少引用计数xwcq_acquire()
:增加引用计数xwcq_release()
:减少引用计数已知循环队列对象的指针的情况下,可以通过 xwcq_get_d()
获取 xwcq_d , 或可以通过 xwcq_get_tik()
获取对象标签。
#define XWCQ_DEF_MEMPOOL | ( | name, | |
slotsize, | |||
slotnum | |||
) | __xwcc_alignl1cache xwu8_t name[(slotsize) * (slotnum)] |
XWCQ API:检查循环队列对象的标签并增加引用计数
[in] | cqd | 循环队列对象描述符 |
XWOK | 没有错误 |
-ENILOBJD | 空的对象描述符 |
-EOBJDEAD | 对象无效 |
-EACCES | 对象标签检查失败 |
XWOS API:绑定循环队列对象到信号选择器
[in] | cq | 循环队列对象的指针 |
[in] | sel | 信号选择器的指针 |
[in] | pos | 循环队列对象对象映射到位图中的位置 |
XWOK | 没有错误 |
-EFAULT | 空指针 |
-ECHRNG | 位置超出范围 |
-EALREADY | 同步对象已经绑定到事件对象 |
-EBUSY | 通道已经被其他同步对象独占 |
XWCQ API: 等待从循环队列的 首端 接收数据 (离队,DeQueue)
[in] | cq | 循环队列对象的指针 |
[out] | data | 指向缓冲区的指针,此缓冲区用于接收数据 |
[in,out] | size | 指向缓冲区的指针,此缓冲区:
|
XWOK | 没有错误 |
-EFAULT | 空指针 |
-EINTR | 等待被中断 |
-ENOTTHDCTX | 不在线程上下文中 |
-EDISIRQ | 中断被关闭 |
-EDISPMPT | 抢占被关闭 |
-EDISBH | 中断底半部被关闭 |
-EINTR
。 XWCQ API: 限时等待从循环队列的 首端 接收数据 (离队,DeQueue)
[in] | cq | 循环队列对象的指针 |
[out] | data | 指向缓冲区的指针,此缓冲区用于接收数据 |
[in,out] | size | 指向缓冲区的指针,此缓冲区:
|
[in] | to | 期望唤醒的时间点 |
XWOK | 没有错误 |
-EFAULT | 空指针 |
-EINTR | 等待被中断 |
-ETIMEDOUT | 超时 |
-ENOTTHDCTX | 不在线程上下文中 |
-EDISIRQ | 中断被关闭 |
-EDISPMPT | 抢占被关闭 |
-EDISBH | 中断底半部被关闭 |
-EINTR
。to
表示等待超时的时间点:to
通常是未来的时间,即 当前系统时间 + delta
, 可以使用 xwtm_ft(delta)
表示;to
是过去的时间点,将直接返回 -ETIMEDOUT
。 <No error
XWCQ API: 等待从循环队列的 首端 接收数据 (离队,DeQueue), 并且等待不可被中断
[in] | cq | 循环队列对象的指针 |
[out] | data | 指向缓冲区的指针,此缓冲区用于接收数据 |
[in,out] | size | 指向缓冲区的指针,此缓冲区:
|
XWOK | 没有错误 |
-EFAULT | 空指针 |
-ENOTTHDCTX | 不在线程上下文中 |
-EDISIRQ | 中断被关闭 |
-EDISPMPT | 抢占被关闭 |
-EDISBH | 中断底半部被关闭 |
<No error
XWCQ API:将数据发送到循环队列的 尾端 (入队,EnQueue)
[in] | cq | 循环队列对象的指针 |
[in] | data | 数据 |
[in,out] | size | 指向缓冲区的指针,此缓冲区:
|
XWOK | 没有错误 |
-EFAULT | 空指针 |
*size
超过初始化循环队列时指定的 slotsize
, 数据将被截断。<No error
XWCQ API:销毁循环队列对象
[in] | cq | 循环队列对象的指针 |
XWOK | 没有错误 |
-EFAULT | 空指针 |
XWCQ API: 获取循环队列中有效数据槽的数量
[in] | cq | 循环队列对象的指针 |
[out] | szbuf | 指向缓冲区的指针,此缓冲区用于返回数量 |
XWOK | 没有错误 |
-EFAULT | 空指针 |
<No error
XWCQ API: 获取循环队列的容量
[in] | cq | 循环队列对象的指针 |
[out] | capbuf | 指向缓冲区的指针,此缓冲区用于返回容量 |
XWOK | 没有错误 |
-EFAULT | 空指针 |
slotnum
指定的。 <No error
XWCQ API: 获取循环队列的单个数据槽的大小
[in] | cq | 循环队列对象的指针 |
[out] | szbuf | 指向缓冲区的指针,此缓冲区用于返回单个数据槽的大小 |
XWOK | 没有错误 |
-EFAULT | 空指针 |
slotsize
指定的。 <No error
XWCQ API:获取循环队列对象的标签
[in] | cq | 循环队列对象的指针 |
XWCQ API:增加循环队列对象的引用计数
[in] | cq | 循环队列控制块对象指针 |
XWOK | 没有错误 |
-EFAULT | 空指针 |
-EOBJDEAD | 对象无效 |
XWCQ API:初始化循环队列
[in] | cq | 循环队列对象的指针 |
[in] | slotsize | 每个数据槽的大小 |
[in] | slotnum | 数据槽的数量 |
[in] | mem | 数据缓冲区的指针, |
XWOK | 没有错误 |
-EFAULT | 空指针 |
-ESIZE | slotsize 或 slotnum 为 0 |
-EALIGN | slotsize 不是 XWMMCFG_ALIGNMENT 的整数倍 |
slotnum
个数据槽构成,每个数据槽能容纳 slotsize
字节的数据。mem
大小不能小于 slotsize * slotnum
, 用户应该使用宏 XWCQ_DEF_MEMPOOL() 来定义数据缓冲区。slotsize
必须是系统配置 XWMMCFG_ALIGNMENT
的整数倍, 错误的大小将返回错误码 -EALIGN
。 <Size error
<Size error
< 内存管理对齐的字节数
< 内存管理未对齐掩码
<Not aligned
XWCQ API:将数据发送循环队列的 首端 (插队,Jump the Queue)
[in] | cq | 循环队列对象的指针 |
[in] | data | 数据 |
[in] | size | 数据的大小 |
XWOK | 没有错误 |
-EFAULT | 空指针 |
*size
超过初始化循环队列时指定的 slotsize
, 数据将被截断。<No error
XWCQ API: 等待从循环队列 头端 拷贝数据 (Peek at the Front of Queue)
[in] | cq | 循环队列对象的指针 |
[out] | data | 指向缓冲区的指针,此缓冲区用于接收数据 |
[in,out] | size | 指向缓冲区的指针,此缓冲区:
|
XWOK | 没有错误 |
-EFAULT | 空指针 |
-EINTR | 等待被中断 |
-ENOTTHDCTX | 不在线程上下文中 |
-EDISIRQ | 中断被关闭 |
-EDISPMPT | 抢占被关闭 |
-EDISBH | 中断底半部被关闭 |
-EINTR
。 XWCQ API: 限时等待从循环队列 头端 拷贝数据 (Peek at the Front of Queue)
[in] | cq | 循环队列对象的指针 |
[out] | data | 指向缓冲区的指针,此缓冲区用于接收数据 |
[in,out] | size | 指向缓冲区的指针,此缓冲区:
|
[in] | to | 期望唤醒的时间点 |
XWOK | 没有错误 |
-EFAULT | 空指针 |
-EINTR | 等待被中断 |
-ETIMEDOUT | 超时 |
-ENOTTHDCTX | 不在线程上下文中 |
-EDISIRQ | 中断被关闭 |
-EDISPMPT | 抢占被关闭 |
-EDISBH | 中断底半部被关闭 |
-EINTR
。to
表示等待超时的时间点:to
通常是未来的时间,即 当前系统时间 + delta
, 可以使用 xwtm_ft(delta)
表示;to
是过去的时间点,将直接返回 -ETIMEDOUT
。 <No error
XWCQ API: 等待从循环队列 头端 拷贝数据 (Peek at the Front of Queue), 并且等待不可被中断
[in] | cq | 循环队列对象的指针 |
[out] | data | 指向缓冲区的指针,此缓冲区用于接收数据 |
[in,out] | size | 指向缓冲区的指针,此缓冲区:
|
XWOK | 没有错误 |
-EFAULT | 空指针 |
-ENOTTHDCTX | 不在线程上下文中 |
-EDISIRQ | 中断被关闭 |
-EDISPMPT | 抢占被关闭 |
-EDISBH | 中断底半部被关闭 |
<No error
XWCQ API: 等待从循环队列 尾端 拷贝数据 (Peek at the Rear of Queue)
[in] | cq | 循环队列对象的指针 |
[out] | data | 指向缓冲区的指针,此缓冲区用于接收数据 |
[in,out] | size | 指向缓冲区的指针,此缓冲区:
|
XWOK | 没有错误 |
-EFAULT | 空指针 |
-EINTR | 等待被中断 |
-ENOTTHDCTX | 不在线程上下文中 |
-EDISIRQ | 中断被关闭 |
-EDISPMPT | 抢占被关闭 |
-EDISBH | 中断底半部被关闭 |
-EINTR
。 XWCQ API: 限时等待从循环队列 尾端 拷贝数据 (Peek at the Rear of Queue)
[in] | cq | 循环队列对象的指针 |
[out] | data | 指向缓冲区的指针,此缓冲区用于接收数据 |
[in,out] | size | 指向缓冲区的指针,此缓冲区:
|
[in] | to | 期望唤醒的时间点 |
XWOK | 没有错误 |
-EFAULT | 空指针 |
-EINTR | 等待被中断 |
-ETIMEDOUT | 超时 |
-ENOTTHDCTX | 不在线程上下文中 |
-EDISIRQ | 中断被关闭 |
-EDISPMPT | 抢占被关闭 |
-EDISBH | 中断底半部被关闭 |
-EINTR
。to
表示等待超时的时间点:to
通常是未来的时间,即 当前系统时间 + delta
, 可以使用 xwtm_ft(delta)
表示;to
是过去的时间点,将直接返回 -ETIMEDOUT
。 <No error
XWCQ API: 等待从循环队列 尾端 拷贝数据 (Peek at the Rear of Queue), 并且等待不可被中断
[in] | cq | 循环队列对象的指针 |
[out] | data | 指向缓冲区的指针,此缓冲区用于接收数据 |
[in,out] | size | 指向缓冲区的指针,此缓冲区:
|
XWOK | 没有错误 |
-EFAULT | 空指针 |
-ENOTTHDCTX | 不在线程上下文中 |
-EDISIRQ | 中断被关闭 |
-EDISPMPT | 抢占被关闭 |
-EDISBH | 中断底半部被关闭 |
<No error
XWCQ API:减少循环队列对象的引用计数
[in] | cq | 循环队列控制块对象指针 |
XWOK | 没有错误 |
-EFAULT | 空指针 |
-EOBJDEAD | 对象无效 |
XWCQ API:检查循环队列对象的标签并增加引用计数
[in] | cqd | 循环队列对象描述符 |
XWOK | 没有错误 |
-ENILOBJD | 空的对象描述符 |
-EOBJDEAD | 对象无效 |
-EACCES | 对象标签检查失败 |
XWCQ API: 等待从循环队列的 尾端 接收数据 (反向离队,Reversely deQueue)
[in] | cq | 循环队列对象的指针 |
[out] | data | 指向缓冲区的指针,此缓冲区用于接收数据 |
[in,out] | size | 指向缓冲区的指针,此缓冲区:
|
XWOK | 没有错误 |
-EFAULT | 空指针 |
-EINTR | 等待被中断 |
-ENOTTHDCTX | 不在线程上下文中 |
-EDISIRQ | 中断被关闭 |
-EDISPMPT | 抢占被关闭 |
-EDISBH | 中断底半部被关闭 |
-EINTR
。 XWCQ API: 限时等待从循环队列的 尾端 接收数据 (反向离队,Reversely deQueue)
[in] | cq | 循环队列对象的指针 |
[out] | data | 指向缓冲区的指针,此缓冲区用于接收数据 |
[in,out] | size | 指向缓冲区的指针,此缓冲区:
|
[in] | to | 期望唤醒的时间点 |
XWOK | 没有错误 |
-EFAULT | 空指针 |
-EINTR | 等待被中断 |
-ETIMEDOUT | 超时 |
-ENOTTHDCTX | 不在线程上下文中 |
-EDISIRQ | 中断被关闭 |
-EDISPMPT | 抢占被关闭 |
-EDISBH | 中断底半部被关闭 |
-EINTR
。to
表示等待超时的时间点:to
通常是未来的时间,即 当前系统时间 + delta
, 可以使用 xwtm_ft(delta)
表示;to
是过去的时间点,将直接返回 -ETIMEDOUT
。 <No error
XWCQ API: 等待从循环队列的 尾端 接收数据 (反向离队,Reversely deQueue), 并且等待不可被中断
[in] | cq | 循环队列对象的指针 |
[out] | data | 指向缓冲区的指针,此缓冲区用于接收数据 |
[in,out] | size | 指向缓冲区的指针,此缓冲区:
|
XWOK | 没有错误 |
-EFAULT | 空指针 |
-ENOTTHDCTX | 不在线程上下文中 |
-EDISIRQ | 中断被关闭 |
-EDISPMPT | 抢占被关闭 |
-EDISBH | 中断底半部被关闭 |
<No error
XWCQ API: 尝试从循环队列的 首端 接收数据 (离队,DeQueue)
[in] | cq | 循环队列对象的指针 |
[out] | data | 指向缓冲区的指针,此缓冲区用于接收数据 |
[in,out] | size | 指向缓冲区的指针,此缓冲区:
|
XWOK | 没有错误 |
-EFAULT | 空指针 |
-ENODATA | 循环队列为空 |
-ENODATA
。<No error
XWCQ API: 尝试从循环队列 头端 拷贝数据 (Peek at the Front of Queue)
[in] | cq | 循环队列对象的指针 |
[out] | data | 指向缓冲区的指针,此缓冲区用于接收数据 |
[in,out] | size | 指向缓冲区的指针,此缓冲区:
|
XWOK | 没有错误 |
-EFAULT | 空指针 |
-ENODATA | 循环队列为空 |
-ENODATA
,此CAPI可在中断中使用。 <No error
XWCQ API: 尝试从循环队列 尾端 拷贝数据 (Peek at the Rear of Queue)
[in] | cq | 循环队列对象的指针 |
[out] | data | 指向缓冲区的指针,此缓冲区用于接收数据 |
[in,out] | size | 指向缓冲区的指针,此缓冲区:
|
XWOK | 没有错误 |
-EFAULT | 空指针 |
-ENODATA | 循环队列为空 |
-ENODATA
,此CAPI可在中断中使用。 <No error
XWCQ API: 尝试从循环队列的 尾端 接收数据 (反向离队,Reversely deQueue)
[in] | cq | 循环队列对象的指针 |
[out] | data | 指向缓冲区的指针,此缓冲区用于接收数据 |
[in,out] | size | 指向缓冲区的指针,此缓冲区:
|
XWOK | 没有错误 |
-EFAULT | 空指针 |
-ENODATA | 循环队列为空 |
-ENODATA
,此CAPI可在中断中使用。 <No error
XWOS API:从信号选择器上解绑循环队列对象
[in] | cq | 循环队列对象的指针 |
[in] | sel | 信号选择器的指针 |
XWOK | 没有错误 |
-EFAULT | 空指针 |
-ENOTCONN | 同步对象没有绑定到事件对象上 |
< 报告BUG
< 当条件x成立时报告BUG
<No error