中斷服務子程式

來源:互聯網
上載者:User

中斷是嵌入式系統中重要的組成部分,這導致了很多編譯開發商提供一種擴充—讓標準C支援中斷。

具代表事實是,產生了一個新的關鍵字 __interrupt。

下面的代碼就使用了__interrupt關鍵字去定義了一個中斷服務子程式(ISR),請評論一下這段代碼的。

 

__interrupt double compute_area (double radius) {    double area = PI * radius * radius;    printf("\nArea = %f", area);    return area;}

 

這個函數有太多的錯誤了,以至讓人不知從何說起了:

1)  ISR 不能返回一個值。如果你不懂這個,那麼你不會被僱用的。

2)  ISR 不能傳遞參數。如果你沒有看到這一點,你被僱用的機會等同第一項。

3)  在許多的處理器/編譯器中,浮點一般都是不可重新進入的。有些處理器/編譯器需要讓額處的寄存器入棧,有些處理器/編譯器就是不允許在ISR中做浮點運算。

此外,ISR應該是短而有效率的,在ISR中做浮點運算是不明智的。

4) 與第三點一脈相承,printf經常有重入和效能上的問題。如果你丟掉了第三和第四點,我不會太為難你的。不用說,如果你能得到後兩點,那麼你的被僱用前景越來越光明了。

 

不能在中斷服務程式中執行類似操作的原因是運算時間太長,不能在中段中作複雜的工作,你可以在中斷服務程式中置一個標誌位.然後在主程式中查詢此位,判斷是否執行計運算元程式.當然這樣做會在中斷產生與實際的中斷響應之間產生一定的延遲,如果你的系統對時間不太敏感還好,如果非常敏感可以考慮採用rtos。否則。。。多加幾句對中斷標誌位的判斷語句。。。。

在主程式中監測是否被置位來決定子程式是否執行.可能存在以下問題,就是,中斷返回後要執行幾個耗時比較長的子程式才能執行判斷標誌位的語句,這樣,可能會有太長的時間間隔.如果你在幾個耗時比較長的子程式之間加上一句判斷語句,就會減小中斷產生與中斷響應之
間的時間延遲.

 中斷活動的全過程大致為:

1、插斷要求:中斷事件一旦發生或者中斷條件一旦構成,中斷源提交“申請報告”,與請求CPU暫時放下目前的工作而轉為中斷源作為專項服務

2、中斷屏蔽:雖然中斷源提交了“申請報告”,但是,是否得到CPU的響應,還要取決於“申請報告”是否能夠通過2道或者3道“關卡”(中斷屏蔽)送達CPU(相應的中斷屏蔽位等於1,為關卡允許存取;反之相應的中斷屏蔽位等於0,為關卡禁止通行);

3、中斷響應:如果一路允許存取,則CPU響應中斷後,將被打斷的工作斷點記錄下來(把斷點地址保護到堆棧),掛起“不再受理其他申請報告牌”(清除全域中斷標誌位GIE=0),跳轉到中斷服務子程式

4、保護現場:在處理新任務時可能破壞原有的工作現場,所以需要對工作現場和工作環境進行適當保護;

5、調查中斷源:檢查“申請報告”是由哪個中斷源提交的,以便作出有針對性的服務;

6、中斷處理:開始對查明的中斷源進行有針對性的中斷服務;

7、清除標誌:在處理完畢相應的任務之後,需要進行撤消登記(清除中斷標誌),以避免造成重複響應;

8、恢複現場:恢複前面曾經被保護起來的工作現場,以便繼續執行被中斷的工作;

9、中斷返回:將被打斷的工作斷點找回來(從堆棧中恢複斷點地址),並摘下“不再受理其他申請報告牌”(GIE=1),繼續執行原先被打斷的工作。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.