跳转到内容

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,但它们应该使用相同的调用顺序。

在基于堆栈调用的体系结构中,上面提到的其他问题可能会导致更大的问题(参数数量不同)。

华夏公益教科书