mcu正常是執行在使用者模式,也就是執行在我們寫的主函式main中。但是,當有一些異常發生時,比如指令不對,資料訪問有問題或者reset等異常情況發生時,cpu就會進入特殊模式進行異常處理。
比如,我們希望按鍵按下就把led小燈點亮,這個時候如果在程式中輪詢按鍵的狀態,就有可能發生檢測延時。按鍵按下了但是程式還沒執行到詢問按鍵狀態的地方,等執行到了,按鍵已經鬆開了,這樣就達不到我們期望的效果。
為了可以即時的做出響應,mcu硬體上有一種異常,叫做中斷,我們可以把按鍵這個引腳配置為乙個外部中斷引腳,當按鍵按下的時候進入響應的中斷服務程式,在子程式中更改標誌位,在主程式中做出處理,把led小燈點亮。
在進入中斷服務程式,我們需要將原來的程式狀態儲存一下,主要是儲存暫存器的狀態,然後跳到中斷服務程式進行處理,處理完還要跳回原來的程式接著執行。所以,中斷處理程式過程如下:
儲存現場(儲存各類暫存器);
呼叫處理程式(處理中斷/異常);
恢復現場(回到原來的程式繼續執行)。
arm對中斷/異常的使用過程:
首先需要初始化,a.設定中斷源,讓它可以產生中斷;b.設定中斷控制器(設定是否要遮蔽,設定優先順序等);c.使能中斷總開關;
中斷未觸發,這時先執行其他程式;
產生中斷,比如按下按鍵,這時中斷控制器會收到訊號,然後中斷控制器給cpu發訊號;
cpu每執行完一條指令,都會檢測有無中斷/異常產生(這一功能是由硬體實現);
發現有異常/中斷產生,開始處理。對於不同的異常,cpu會跳到不同的位址(異常向量,有乙個異常向量表)執行程式;(這些位址上,只是一條跳轉指令,跳去執行其他函式, 這些函式,需要儲存現場,處理異常(中斷)呼叫處理函式,恢復現場)。
2440的異常向量表如下:
那麼,中斷函式怎樣呼叫呢?
答:不多說了,很基礎了,看圖就能懂。
linux中斷(與異常)處理過程
來自 linux核心修煉之道 中斷處理基本過程 首先裝置產生中斷,並通過中斷線將中斷訊號送往中斷控制器。如果該中斷沒有被遮蔽,則會被送往 cpu 的 intr 引腳。cpu 立即停止當前的工作,根據從中斷控制器獲得的中斷向量號,從 idt interrupt descriptor table中斷描述...
中斷 異常與併發
title 中斷 異常與併發 date 2019 12 29 22 19 12 2.異常 3.併發 在學習了組合語言課程後,才總算有所領會,於是打算進行相應的歸納。何為中斷?書本上的一種解釋如下 中斷 interrupt 是一種使cpu掛起正在執行的程式而轉去處理特殊事件的操作。不嚴謹地說,中斷就是...
中斷與異常的區別
一 中斷 系統停止當前正在執行的程式而轉向其他服務,可能是因為優先順序高的請求 服務了,或者是因為人為安排中斷。中斷是屬於正常現象。異常 是由於軟體錯誤而引起的 二 中斷是cpu所具備的功能 硬體 異常是軟體執行過程中的一種開發過程中沒有考慮到的程式錯誤 軟體 三 1.中斷的概念 所謂中斷是指cpu...