gcc --- __attribute __((interrupt(irq)))

时间:2012-12-09 10:21:50

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

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

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

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

2 个答案:

答案 0 :(得分:1)

GCC docs获取中断属性:

  

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

您可以轻松地使用objdump来查看此属性如何更改二进制文件,这样可以更好地为您了解情况。

答案 1 :(得分:0)

该属性只能由OS的中断处理程序使用,而不能由特定驱动程序的中断处理程序使用。操作系统将读取IRQ向量/数字并调用相应的驱动程序函数来为IRQ提供服务。您只需要在操作系统中注册驱动程序/ ISR。