中断发生率上限

摘要

将中断对象绑定到端口。

声明

#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_packet_interrupt_t 中触发中断的时间的时间戳(相对于 ZX_CLOCK_BOOT)。绑定中断时使用的将显示在 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_DENIED handle 句柄缺少 ZX_RIGHT_READ,或者 port_handle 句柄缺少 ZX_RIGHT_WRITE

ZX_ERR_ALREADY_BOUND此中断对象已绑定。

ZX_ERR_INVALID_ARGS options 不是 ZX_INTERRUPT_BINDZX_INTERRUPT_UNBIND

ZX_ERR_NOT_FOUND 端口与绑定的端口不匹配。

另请参阅