中斷同步物件

PortCls 系統驅動程式會實作 IInterruptSync 介面,以取得迷你埠驅動程式的優點。 IInterruptSync 代表中斷同步處理物件,可同步處理插斷服務常式清單的執行, (ISR) 與非中斷常式。

中斷同步物件提供兩個主要功能:

  • 執行 ISR 清單以回應中斷。 同步物件會連線到中斷來源。 每次中斷發生時,同步物件都會根據選取的模式,依指定循序執行 ISR。 (請參閱下列三種模式的描述。)

  • 執行非 ISR 的常式。 這些非中斷常式不會連線到同步物件的中斷。 相反地,非中斷常式會在呼叫端選擇時執行。 不過,同步物件會以物件的 ISR 清單同步執行非中斷常式。 換句話說,非中斷常式會在同步物件清單中的任何 ISR 開始執行之前完成,反之亦然。

中斷同步處理物件在處理多個 ISR 時具有彈性。 ISR 位於同步物件在停機時間周遊的連結清單中。 當迷你埠驅動程式向同步物件註冊 ISR 時,它會指定 ISR 是否應該加入此清單的開頭或結尾。

迷你埠驅動程式會呼叫 PcNewInterruptSync 函式來建立中斷同步物件。 在此呼叫期間,驅動程式會指定物件在中斷時周遊其 ISR 清單的方式。 呼叫支援下表中由 INTERRUPTSYNCMODE 列舉常數指定的三個選項。

常數 意義

InterruptSyncModeNormal

呼叫清單中的每個 ISR,直到其中一個 ISR 傳回STATUS_SUCCESS為止。

InterruptSyncModeAll

不論上述 ISR 的傳回碼為何,請完全呼叫清單中的每一個 ISR。

InterruptSyncModeRepeat

周遊整個 ISR 清單,直到通過清單的行程發生時,清單中沒有 ISR 傳回STATUS_SUCCESS。

InterruptSyncModeNormal 模式中,同步物件會呼叫清單中的每個 ISR,直到其中一個 ISR 傳回STATUS_SUCCESS為止。 未呼叫此 ISR 之後清單中的任何 ISR。 此模式會模擬作業系統正常處理 ISR 的方式。 如果沒有任何 ISR 傳回STATUS_SUCCESS,則行為與 InterruptSyncModeAll相同。

InterruptSyncModeAll 模式中,不論上述 ISR 的傳回碼為何,清單中每個 ISR 都會完全呼叫一次。 這適用于較基本的硬體,其中中斷來源不具決定性,但在其他情況下可能很有用。 例如,不論特定中斷來自哪一個來源,兩個中斷來源在每次中斷時可能會緊密同步處理。

InterruptSyncModeRepeat 模式中,同步物件會重複周遊整個 ISR 清單,直到清單發生時,清單中沒有任何常式傳回STATUS_SUCCESS。 此模式適用于來自多個來源的中斷可能會同時在同一個中斷線上引發,或在 ISR 處理期間可能會引發第二個中斷的情況。 每個中斷來源都必須能夠判斷它是否需要處理。 如果一律傳回STATUS_SUCCESS的 ISR 在此模式中向同步物件註冊,系統將會停止回應。

在這些模式中,如果有任何已註冊的 ISR 傳回STATUS_SUCCESS,同步物件就會認可作業系統中斷。 在所有三種模式中,如果所有中斷來源都指出它們未成功處理中斷,則同步物件會將不成功的結果碼傳回至作業系統。

IInterruptSync介面支援下列方法:

IInterruptSync::CallSynchronizedRoutine

IInterruptSync::Connect

IInterruptSync::D isconnect

IInterruptSync::GetKInterrupt

IInterruptSync::RegisterServiceRoutine