2015-10-20 49 views
0

我正在談論一個使用ARM cortex M3的系統。我所指的代碼是用固件編寫的。用戶向固件發送特定作業的命令,並且固件調用特定的軟件中斷處理程序來執行與正在發送的命令相對應的任務。我知道軟件中斷處理程序在中斷向量表中提到,但是如何發出命令由用戶例如。擦除將導致軟件中斷被稱爲內部固件,將進行擦除操作?代碼執行如何跳轉到軟件中斷處理程序?

+0

「我所指的代碼是用固件寫的」固件是一種新的編程語言嗎? – Olaf

+0

nonono,我只是說它是一個固件代碼,你有很好的幽默感:D – JIN007

回答

0

軟件中斷是一條指令(也是通過其他名稱,同一條指令)。處理器中的邏輯知道將模式切換到管理員或任何正確的模式,並開始執行(有點像跳轉)到向量表中地址所指示的代碼。然後在那裏有處理命令的軟件,在調用軟件中斷指令之前設置的內容告訴操作系統是什麼或有效地執行該系統調用。

在進行系統調用的應用程序層的代碼中,鏈接到應用程序中的庫/代碼從應用程序獲取參數,併爲軟件中斷設置適當的信息,執行軟件中斷,收集中斷返回並清除時的結果。

編輯。

向量表中的所有向量都以這種方式工作。甚至重置。邏輯知道事件發生的時間,中斷,數據中止,未定義的指令等。邏輯硬連線到特定地址,讀取該值,這是一個地址,然後開始在該處理程序地址執行。 swi/svc只是另一個「事件」,但我們希望直接創建vs創建一個未定義的指令或未對齊的訪問等,這些都將基本上做同樣的事情,觸發事件,正常執行停止,機器狀態可能或可能無法保存(某些百分比位於cortex-m3中,但可能取決於事件),並執行處理程序。 (在m3中沒有管理員,用戶是全尺寸的手臂)。 svc/swi是一個雖然我們想創建未定義的地方,但通常不想。硬件中斷並沒有太大的不同,但我們並沒有插入一條指令來引起它們,其他邏輯基於該邏輯中的某個事件導致它們。在所有情況下,我們(程序員)必須爲我們所關心的每個事件編寫代碼(以及我們需要處理的每個事件,涵蓋所有可能發生的事件),其中一個可能是svc/swi事件,而在那裏它不是由arm定義的,你稱之爲系統函數或者它們是如何定義的。手臂可能有一套他們使用,但你在技術上可以自由創建任何你想要的機制和任何系統調用你想要的,你只需要確保調用者和被調用者就定義達成一致,誰負責什麼。

相關問題