# C語言題庫-059 中斷是嵌入式系統中重要的組成部分,這導致了很多編譯開發商提 供一種擴展—讓標準C 支持中斷。具代表事實是,產生了一個新的關鍵字 __interrupt 。下面的代碼就使用了__interrupt 關鍵字去定義了一箇中斷服 務子程序(ISR),請評論一下這段代碼的。 ``` __interrupt double compute_area (double radius) { double area = PI * radius * radius; printf(" Area = %f", area); return area; } ``` 【參考答案】這個函數有太多的錯誤了,以至讓人不知從何說起了: 1). ISR 不能返回一個值。如果你不懂這個,那麼你不會被僱用的。 2). ISR 不能傳遞參數。如果你沒有看到這一點,你被僱用的機會等同第 一項。 3). 在許多的處理器/編譯器中,浮點一般都是不可重入的。有些處理器/編 譯器需要讓額處的寄存器入棧,有些處理器/編譯器就是不允許在ISR 中做 浮點運算。此外,ISR 應該是短而有效率的,在ISR 中做浮點運算是不明 智的。 4). 與第三點一脈相承,printf() 經常有重入和性能上的問題。如果你丟掉 了第三和第四點,我不會太爲難你的。不用說,如果你能得到後兩點,那 麼你的被僱用前景越來越光明瞭。