2017-05-30 67 views
1

网络用于定义ARM的ISR上的演示代码ISR语法一般是这样的:与ARM-GCC

__irq void ISRFunc (void); 

使用ARM-GCC,这给出了编译语法错误,我已经试过明显变异像_irq但他们都有同样的问题。一些谷歌引用声明,你不需要指定函数作为ISR,即void ISRFunc(...)也可以工作。然而,我在运行程序时遇到了麻烦,所以如果有人能够确认(a)是需要的类型说明符__irq(或等效的),并且(b)避免编译错误应该怎么做会有很大帮助。

感谢您的任何信息。

回答

2

__isrARM C compiler specific关键字(并且看起来像是Keil specific too,but obsoleted),并且不会通过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更一般的“保存 退出时你在这里使用和恢复”。

+0

谢谢Andrejs。这是我可以勾出更多的不确定性!欢呼 – BruceV

+0

不客气!不要忘记接受答案:) –

+0

我会尽快找到如何做到这一点! – BruceV