gcc --- __attribute__((interrupt( irq )))

3
我从ARM设备驱动开始学习...在那里我看到每个处理程序都有一个__attribute__((interrupt(irq)))的提及。我很困惑这个属性如何调用我们的驱动程序例程..?
ARM的IRQ有以下向量地址-0x00000018(或0xFFFF0018)。由于同一行可能有许多中断处理程序,因此如果我们有4个设备驱动程序,每个驱动程序都有自己的IRQ需要注册。
这意味着GCC编译器将为IRQ处理程序提供一些启动代码,并在其中为中断处理程序调用我们的例程... 我是对的吗?

如果你想问gcc是否会生成代码来自动安装中断例程,那么答案是否定的。 - Gunther Piez
2个回答

2

以下是关于interrupt属性的翻译,来自GCC文档

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

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


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接