跳轉到內容

Aros/開發者/文件/HIDD/IRQ

來自華夏公益教科書,開放的書籍,開放的世界
用於 Aros 華夏公益教科書的導航欄
Aros 使用者
Aros 使用者文件
Aros 使用者常見問題解答
Aros 使用者應用程式
Aros 使用者 DOS Shell
Aros/使用者/AmigaLegacy
Aros 開發文件
Aros 開發者文件
從 AmigaOS/SDL 移植軟體
面向 Zune 初學者
Zune .MUI 類
面向 SDL 初學者
Aros 開發者構建系統
特定平臺
Aros x86 完整系統 HCL
Aros x86 音訊/影片支援
Aros x86 網路支援
Aros Intel AMD x86 安裝
Aros 儲存支援 IDE SATA 等
Aros Poseidon USB 支援
x86-64 支援
摩托羅拉 68k Amiga 支援
Linux 和 FreeBSD 支援
Windows Mingw 和 MacOSX 支援
Android 支援
Arm Raspberry Pi 支援
PPC Power Architecture
雜項
Aros 公共許可證
convert to KrnAddInterrupt/KrnRemInterrupt, and irq.hidd is deprecated

HIDD API 事實上是重量級的。您需要開啟一個 HIDD 庫,開啟 oop.library,例項化一個物件(即使實際上沒有物件,就像在這種情況下);而物件呼叫比普通的庫呼叫更昂貴。

  • 面向物件的方法有利於實現複雜的事物,因為它提供了程式碼重用。它被證明對圖形和 PCI 程式碼很有用。但是什麼是 IRQ 處理呢?它只是一些列表,僅此而已。您可以新增或刪除處理程式,剩下的就超出您的控制範圍了。
  • 實際上,開發人員不應該與“IRQ 編號”實體進行互動。我們的 PCI API 不完整,因為它缺少“為裝置新增中斷處理程式”方法。當前方法僅在 PC 類機器上有效,PCI 和系統 IRQ 之間存在一對一的關係。

例如,在 Amiga 上,不存在這種關係。在那裡,所有 PCI 裝置共享同一個系統中斷,需要使用橋接器特定的程式碼進行解複用。因此,直接 IRQ 處理僅由以下部分需要:

  • 底層系統元件,例如 PCI 驅動程式本身。
  • 具有硬連線 IRQ 的非自動配置裝置(PC 遺留裝置)。

但是,這種“開發人員不應該與“IRQ 編號”進行互動”的說法,是否也意味著從第三方開發人員的角度來看 KrnAddIRQHandler 也是錯誤的呢?該函式是否應該被移動到 pci 裝置物件中,並讓它與核心進行通訊呢?一個合適的 API 將以“事件”或“訊息”的形式工作。中斷將只是一個實現細節。或者可能是訊號-槽正規化。有一些文獻比較了這兩種方法。

參考資料

[編輯 | 編輯原始碼]

讓 irq.hidd 成為核心.resource 函式的薄包裝器是一件好事,因為它為開發人員提供了一個一致的介面來進行操作 - 始終是 HIDD(irq、pci、圖形等)。我不明白這種包裝器如何有用,我認為它只會使事情變得更加複雜。

許多地方使用不同的簽名呼叫 struct Interrupt's is_Code。

rom/exec/intservers.c:
   IntServer expects intMask in D0 (instead of the correct D1)
   .. but calls is_Code without D1
   Interrupt Server: D0/D1 = undefined. Handler: D0 undefined, D1 = mask.

   VBlankServer expects intMask in D1
   .. and calls IntServer with it in D1.

SoftIntDispatch expects 5 arguments...
   .. but calls the chained interrupt with only 3..

..以及許多地方,驅動程式使用不同調用簽名的函式設定 is_Code,但它們應該使用相同的呼叫順序。

在基於堆疊呼叫的體系結構中,上面提到的其他問題可能會導致更大的問題(引數數量不同)。

華夏公益教科書