摘要
將中斷物件繫結至通訊埠。
宣告
#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_t
的 key
欄位中。
如果繫結的中斷狀態處於觸發狀態,系統會將 ZX_PKT_TYPE_INTERRUPT
封包傳送至受中斷事件繫結的通訊埠,其中包含觸發中斷的時間戳記。這個封包必須經過正常的處理。
如何在選項中繫結至通訊埠傳遞 ZX_INTERRUPT_BIND
。
如要在選項中解除先前繫結的通訊埠傳遞 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
handle 或 port_handle 不是有效的控制代碼。
ZX_ERR_WRONG_TYPE
處理常式不是中斷物件,或者 port_handle 不是通訊埠物件。
ZX_ERR_CANCELED
zx_interrupt_destroy()
已在帳號代碼上呼叫。
ZX_ERR_BAD_STATE
執行緒正使用 zx_interrupt_wait()
在等待中斷
ZX_ERR_ACCESS_DENIED
處理常式控點缺少 ZX_RIGHT_READ
或 port_handle 控制點 ZX_RIGHT_WRITE
ZX_ERR_ALREADY_BOUND
這個中斷物件已繫結。
ZX_ERR_INVALID_ARGS
選項不是 ZX_INTERRUPT_BIND
或 ZX_INTERRUPT_UNBIND
。
ZX_ERR_NOT_FOUND
通訊埠與繫結通訊埠不符。
另請參閱
zx_handle_close()
zx_interrupt_ack()
zx_interrupt_create()
zx_interrupt_destroy()
zx_interrupt_trigger()
zx_interrupt_wait()
zx_port_wait()