中斷是嵌入式系統中重要的組成部分,但是在標准C中不包含中斷。許多編譯開發商在標准C上增加了對中斷的支持,提供新的關鍵字用於標示中斷服務程序 (ISR),類似於__interrupt、#program interrupt等。當一個函數被定義為ISR的時候,編譯器會自動為該函數增加中斷服務程序所需要的中斷現場入棧和出棧代碼
例:
_interrupt double compute_area(double radius)
{
double area=PI*radius*radius;
printf("%f\n", area);
return area;
}
中斷服務程序需要滿足如下要求:
(1)不能返回值;
(2)不能向ISR傳遞參數;
(3) ISR應該盡可能的短小精悍;
(4) printf(char * lpFormatString,…)函數會帶來重入和性能問題,不能在ISR中采用
(5)在許多處理器、編譯器中,浮點一般都是不可重入的。有些處理器/編譯器需要讓額外的寄存器入棧,有些處理器/編譯器就不允許ISR 中做浮點運算。此外,ISR 應該是短而有效率的,在ISR 中做浮點運算是不明智的
參考 : http://blog.csdn.net/maochengtao/article/details/40373039