2

我从 arm 的设备驱动程序开始......我看到每个处理程序都提到 --- - __attribute__((interrupt( irq )))。我很困惑这个属性将如何调用我们的驱动程序例程 ..??

arm的IRQ具有以下向量地址--- 0x00000018(或0xFFFF0018)因为同一行上可以有许多中断处理程序。假设我们有 4 个设备驱动程序,每个设备驱动程序都有自己的 IRQ 需要重新注册。

意味着 GCC 编译器将为 IRQ 处理程序提供一些启动代码,编译器将在中断处理程序的启动代码中调用我们的例程.....我对吗...?

4

2 回答 2

1

来自GCC 文档中断属性:

当此属性存在时,编译器生成适用于中断处理程序的函数进入和退出序列。

您可以objdump轻松地使用该属性来查看此属性如何更改您的二进制文件,从而更好地为您阐明情况。

于 2012-12-09T10:43:15.783 回答
0

该属性只能由操作系统的中断处理程序使用,而不应由特定驱动程序的中断处理程序使用。操作系统将读取 IRQ 向量/编号并调用适当的驱动程序函数来服务 IRQ。您只需向操作系统注册您的驱动程序/ISR。

于 2012-12-29T09:18:16.547 回答