2013-04-30 52 views
0

我試圖找到一個合適的答案,但找不到任何答案,我需要知道在任何系統中實施一組ISR時必須考慮哪些問題。ISR中斷服務程序和傳統代碼有什麼區別?

在此先感謝!

+0

什麼是'porober'? – leppie 2013-04-30 14:52:06

+0

對不起,我的意思是正確的* – 2013-04-30 14:57:32

+0

你的問題含糊不清。你的意思是在微控制器中找到的ISR?或OS中斷?你想要實現/理解什麼? – Hossein 2013-04-30 15:03:22

回答

0

中斷服務程序(duh!)爲「中斷」提供服務。一個「中斷」非常多 - 「正常」代碼的執行被中斷(出於任何一種原因)並且控制被傳遞到與先前執行的代碼沒有真正關係/知識的服務例程(即使該代碼以某種方式引起中斷)。請注意,中斷可能發生在許多「級別」 - 非常低級別的ISR可能會處理未實現的指令(例如,不支持該功能的FPU中的「sqrt」指令)並模擬該功能。它們可以處理設備I/O(與執行代碼完全無關),頁面錯誤,程序錯誤等。

通常情況下(它隨處理器,操作系統和中斷類型而變化)保存了最小的「處理器狀態」,因此ISR必須首先保存足夠的狀態(附加的GPR,狀態寄存器等),直到它有足夠的空閒執行其功能。通常情況下,保存將進入預先分配的「中斷保存區域」,除非中斷爲「高電平」,足以使ISR可分頁,在這種情況下,可以使用堆棧頂部。

然後,ISR必須執行其功能,小心限制自己的可用資源(例如,如果不是處於可分頁狀態,只使用「固定」存儲器)。

最後,ISR必須恢復被中斷的環境並返回,或者,如果要將中斷轉換爲異常,請創建相應的異常信號環境併發出異常信號。

+0

感謝兄弟,但你的回答與我的問題不匹配,感謝你的合作 – 2013-04-30 15:33:22

+0

(獨特的)問題主要圍繞着認識到例程運行在*非常*限制的環境中,因此很多常見的編碼技術不能使用 - 沒有例外,沒有分頁,有時甚至沒有任何RAM,只是註冊。如果使用高級語言,必須非常小心,以防止它不應該做它的事情。 – 2013-04-30 17:09:42

+0

非常感謝! – 2013-05-01 14:12:08

相關問題