2017-05-30 83 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