中断发生率上限

摘要

将中断对象绑定到端口。

声明

#include <zircon/syscalls.h>

zx_status_t zx_interrupt_bind(zx_handle_t handle,
                              zx_handle_t port_handle,
                              uint64_t key,
                              uint32_t options);

说明

zx_interrupt_bind() 可绑定或取消绑定中断对象到端口。

一个中断对象只能绑定到一个端口,且只能绑定一次。 中断只能绑定到使用 ZX_PORT_BIND_TO_INTERRUPT 创建的端口 选项。

当绑定的中断对象被触发时,ZX_PKT_TYPE_INTERRUPT 数据包将 带有时间戳(相对于 ZX_CLOCK_MONOTONIC)传送到其绑定的端口 在 zx_packet_interrupt_t 中触发中断的时间。使用的密钥 时,中断将显示在 zx_port_packet_tkey 字段中。

如果要绑定的中断处于已触发状态,那么 系统会将 ZX_PKT_TYPE_INTERRUPT 个数据包发送到中断要绑定的端口, 以及中断触发的时间戳。此数据包需要 进行正常处理

如需绑定到端口,请在 options 中传递 ZX_INTERRUPT_BIND

如需取消绑定先前绑定的端口,请在 options 中传递 ZX_INTERRUPT_UNBIND。要解除绑定 port_handle 是必需项,但 key 会被忽略。取消绑定端口之前会移除 排入队列的数据包发送到该端口。

在传送另一个数据包之前,必须使用 zx_interrupt_ack() 系统调用。(几乎在所有情况下)最好在中断后执行 数据包已完全处理。特别是在有多个线程读取 来自某个端口的数据包时,如果处理线程重新准备了中断,并且中断已触发, 数据包会立即传送到等待线程

中断数据包通过端口上的专用队列传送,优先级更高 与非中断数据包相比

权限

handle 的类型必须为 ZX_OBJ_TYPE_INTERRUPT 且包含 ZX_RIGHT_READ

port_handle 的类型必须为 ZX_OBJ_TYPE_PORT 且包含 ZX_RIGHT_WRITE

返回值

如果成功,zx_interrupt_bind() 会返回 ZX_OK。在活动中 则会返回负的错误值。

错误

ZX_ERR_BAD_HANDLE handleport_handle 不是有效的句柄。

ZX_ERR_WRONG_TYPE handle 不是中断对象或 port_handle 不是端口对象。

ZX_ERR_CANCELEDhandle 上调用了 zx_interrupt_destroy()

ZX_ERR_BAD_STATE 线程正在等待使用 zx_interrupt_wait() 的中断

ZX_ERR_ACCESS_DENIEDhandle 句柄缺少 ZX_RIGHT_READport_handle 句柄 缺少 ZX_RIGHT_WRITE

ZX_ERR_ALREADY_BOUND:此中断对象已绑定。

ZX_ERR_INVALID_ARGS options 不是 ZX_INTERRUPT_BINDZX_INTERRUPT_UNBIND

ZX_ERR_NOT_FOUND,表示端口与绑定端口不匹配。

另请参阅