不能在中斷服務程序中執行類似操作的原因是運算時間太長,不能在中段中作複雜的工作,你可以在中斷服務程序中置一個標誌位.然後在主程序中查詢此位,判斷是否執行計算子程序.當然這樣做會在中斷產生與實際的中斷響應之間產生一定的延遲,如果你的系統對時間不太敏感還好,如果非常敏感可以考慮採用rtos。否則。。。多加幾句對中斷標誌位的判斷語句。。。。
在主程序中監測是否被置位來決定子程序是否執行.可能存在以下問題,就是,中斷返回後要執行幾個耗時比較長的子程序才能執行判斷標誌位的語句,這樣,可能會有太長的時間間隔.如果你在幾個耗時比較長的子程序之間加上一句判斷語句,就會減小中斷產生與中斷響應之間的時間延遲.
中斷活動的全過程大致為:
1、中斷請求:中斷事件一旦發生或者中斷條件一旦構成,中斷源提交「申請報告」,與請求CPU暫時放下目前的工作而轉為中斷源作為專項服務
2、中斷屏蔽:雖然中斷源提交了「申請報告」,但是,是否得到CPU的響應,還要取決於「申請報告」是否能夠通過2道或者3道「關卡」(中斷屏蔽)送達CPU(相應的中斷屏蔽位等於1,為關卡放行;反之相應的中斷屏蔽位等於0,為關卡禁止通行);
3、中斷響應:如果一路放行,則CPU響應中斷後,將被打斷的工作斷點記錄下來(把斷點地址保護到堆棧),掛起「不再受理其他申請報告牌」(清除全局中斷標誌位GIE=0),跳轉到中斷服務子程序
4、保護現場:在處理新任務時可能破壞原有的工作現場,所以需要對工作現場和工作環境進行適當保護;
5、調查中斷源:檢查「申請報告」是由哪個中斷源提交的,以便作出有針對性的服務;
6、中斷處理:開始對查明的中斷源進行有針對性的中斷服務;
7、清除標誌:在處理完畢相應的任務之後,需要進行撤銷登記(清除中斷標誌),以避免造成重復響應;
8、恢復現場:恢復前面曾經被保護起來的工作現場,以便繼續執行被中斷的工作;
9、中斷返回:將被打斷的工作斷點找回來(從堆棧中恢復斷點地址),並摘下「不再受理其他申請報告牌」(GIE=1),繼續執行原先被打斷的工作。