關於 irq的使用

2021-06-02 20:27:44 字數 640 閱讀 4146

__irq為乙個標識,用來表示乙個函式是否為中斷函式。對於不同的編譯器,__irq在函式名中的位置不一樣,例如:

ads編譯器中:

void __irq irq_eint0(void);

keil編譯器中:

void irq_eint0(void) __irq;

但是其意義一樣,它所完成的任務是標識該函式為中斷函式,在編譯器編譯是呼叫此函式時,先保護函式入口現場,然後執行中斷函式,函式執行完畢,恢復中斷現場,這整個過程不需要使用者重新編寫**來完成,由編譯器自動完成。因而這也給不具備中斷巢狀功能的arm系統帶來了問題,若使用 __irq 時有中斷巢狀產生,這現場保護就會混亂。在前一篇日誌「lpc2000系列中斷巢狀處理」中,自己編寫中斷入口現場保護**,並不使用 __irq 識別符號號,就是這個原因。

總結如下:

1、若不想自己編寫中斷入口現場保護**,而且使用中無中斷巢狀,在中斷函式中用 __irq 來標識我們的中斷函式,否則出錯;

2、若程式中要使用中斷巢狀,對於無中斷巢狀功能的arm來說,一定要自己編寫中斷入口現場保護**,而且不能用 __irq 標識我們的中斷函式,否則出錯。

arzhiy

2007-01-30

關於 irq 的使用

關於 irq使用,首先看arm公司的說明 arm 編譯器 armcc 支援的函式關鍵字和運算子。下表列出的關鍵字是 arm 對 c 和 c 標準的擴充套件。表中沒有介紹不具備 arm 編譯器特有的行為或限制的標準 c 和 c 關鍵字。arm 編譯器支援的關鍵字擴充套件表 關鍵字 align int6...

關於 irq 的使用

關於 irq使用,首先看arm公司的說明 arm 編譯器 armcc 支援的函式關鍵字和運算子。下表列出的關鍵字是 arm 對 c 和 c 標準的擴充套件。表中沒有介紹不具備 arm 編譯器特有的行為或限制的標準 c 和 c 關鍵字。arm 編譯器支援的關鍵字擴充套件表 關鍵字 align int6...

關於 irq 的使用

arm 編譯器支援的關鍵字擴充套件表 關鍵字 align int64 svc alignof intaddr svc indirect asm irq svc indirect r7 declspec packed value in regs forceinline pure weak global...