【问题标题】:gcc --- __attribute__((interrupt( irq )))gcc --- __attribute__((interrupt( irq )))
【发布时间】:2012-12-09 10:21:49
【问题描述】:

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

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

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

【问题讨论】:

  • 如果您想询问 gcc 是否以某种方式生成代码以自动安装您的中断例程 - 不,不是这种情况。

标签: gcc arm linux-device-driver embedded-linux


【解决方案1】:

来自GCC docs中断属性:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-24
      • 2013-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多