我开始使用arm的设备驱动程序...我看到每个处理程序提到--- __attribute__((interrupt( irq )))
- 我很困惑这个属性如何调用我们的驱动程序例程。
手臂的IRQ有以下向量地址--- 0x00000018(或0xFFFF0018) 因为在同一行上可以有许多中断处理程序。假设我们有4个设备驱动程序,每个驱动程序都有自己的IRQ要注册。
意味着GCC编译器将为IRQ处理程序提供一些启动代码。编译器会在中断处理程序的启动代码中调用我们的例程.....我是对的......?
答案 0 :(得分:1)
从GCC docs获取中断属性:
当存在此属性时,编译器会生成适合在中断处理程序中使用的函数入口和出口序列。
您可以轻松地使用objdump
来查看此属性如何更改二进制文件,这样可以更好地为您了解情况。
答案 1 :(得分:0)
该属性只能由OS的中断处理程序使用,而不能由特定驱动程序的中断处理程序使用。操作系统将读取IRQ向量/数字并调用相应的驱动程序函数来为IRQ提供服务。您只需要在操作系统中注册驱动程序/ ISR。