ARM-GCC

时间:2017-05-30 08:07:03

标签: gcc syntax arm isr

Web上用于定义ARM的ISR的演示代码通常是这样的:

__irq void ISRFunc (void);

使用ARM-GCC,这会在编译时出现语法错误,我尝试过像_irq这样的明显变体,但它们都有同样的问题。一些Google引用声明您不需要将该功能指定为ISR,即void ISRFunc(...)也可以使用。但是,我无法让我的程序运行,所以如果有人确认(a)是所需的类型说明符__irq(或等效的),并且(b)它应该是什么,它将会有很大帮助是为了避免编译错误。

感谢您提供任何信息。

1 个答案:

答案 0 :(得分:3)

__isrARM C compiler specific关键字(看起来像Keil specific too,但已过时),不会通过GCC编译。

根据GCC documentation,以下是声明ARM中断服务例程的语法:

void __attribute__((interrupt("IRQ"))) do_irq()
{
    //your irq service code goes here
}

额外细节:

实际上,您可以使用以下任何一项来通知编译器您的函数是中断处理程序。

void __attribute__((interrupt)) ...
void __attribute__((interrupt("FIQ"))) ...
void __attribute__((interrupt("IRQ"))) ...

差异是"IRQ""FIQ"应该切换寄存器上下文并保存确定 寄存器("FIQ"没有堆叠),而普通interrupt更像是一般的“保存” 你在这里使用什么,并在退出“。

时恢复