一般來說呢,不建議在中斷函數里完成很複雜或耗時很久的操作,除非你主程式什麼都不做,倒還可以考慮.
推薦的做法是,在中斷函數里設定一些全域性變數,主函式中去判斷這個變數,然後處理.
為什麼要這樣做呢? 樓主自己也有思考過,如果前一箇中斷函式還沒結束,又來一箇中斷請求,會發生什麼問題? 回答這個問題就涉及到中斷優先順序和中斷是否可嵌套了。中斷巢狀是指,在一箇中斷處理過程中,又來一箇中斷請求,那麼滿足“條件”的新中斷請求函式會打斷前一箇中斷處理函式的執行,轉而執行新中斷函式,等這個函式退出時再繼續前一箇中斷處理函式的執行。那麼這個“條件”是什麼呢?一般是指中斷優先順序,也就是級別高的中斷請求可以打斷級別低的中斷函式的執行;反之,則算不滿足條件,新中斷請求只能等前一箇中斷處理完才被允許執行處理函式。樓主這個問題中是後一個定時器中斷會不會打斷前一個定時器的中斷處理函式,在51微控制器和其它大部分微控制器中是不會的,因為後一箇中斷請求的優先順序並不比前一箇中斷的優先順序高。
這時後一個定時器中斷請求如何處置呢?那就要看你在前一箇中斷結束後,後一箇中斷請求的標誌位是否還有效嘍,有效則再次進入定時器中斷,無效則忽略後一個定時器中斷請求,就像沒發生過後一個定時器中斷請求一樣?
什麼情況下會出現“無效”這種情況呢?當你的程式在中斷函式返回之前刻意使用指令去清零定時器中斷標誌位,就會出現“無效”。
一般來說呢,不建議在中斷函數里完成很複雜或耗時很久的操作,除非你主程式什麼都不做,倒還可以考慮.
推薦的做法是,在中斷函數里設定一些全域性變數,主函式中去判斷這個變數,然後處理.
為什麼要這樣做呢? 樓主自己也有思考過,如果前一箇中斷函式還沒結束,又來一箇中斷請求,會發生什麼問題? 回答這個問題就涉及到中斷優先順序和中斷是否可嵌套了。中斷巢狀是指,在一箇中斷處理過程中,又來一箇中斷請求,那麼滿足“條件”的新中斷請求函式會打斷前一箇中斷處理函式的執行,轉而執行新中斷函式,等這個函式退出時再繼續前一箇中斷處理函式的執行。那麼這個“條件”是什麼呢?一般是指中斷優先順序,也就是級別高的中斷請求可以打斷級別低的中斷函式的執行;反之,則算不滿足條件,新中斷請求只能等前一箇中斷處理完才被允許執行處理函式。樓主這個問題中是後一個定時器中斷會不會打斷前一個定時器的中斷處理函式,在51微控制器和其它大部分微控制器中是不會的,因為後一箇中斷請求的優先順序並不比前一箇中斷的優先順序高。
這時後一個定時器中斷請求如何處置呢?那就要看你在前一箇中斷結束後,後一箇中斷請求的標誌位是否還有效嘍,有效則再次進入定時器中斷,無效則忽略後一個定時器中斷請求,就像沒發生過後一個定時器中斷請求一樣?
什麼情況下會出現“無效”這種情況呢?當你的程式在中斷函式返回之前刻意使用指令去清零定時器中斷標誌位,就會出現“無效”。