我正在談論一個使用ARM cortex M3的系統。我所指的代碼是用固件編寫的。用戶向固件發送特定作業的命令,並且固件調用特定的軟件中斷處理程序來執行與正在發送的命令相對應的任務。我知道軟件中斷處理程序在中斷向量表中提到,但是如何發出命令由用戶例如。擦除將導致軟件中斷被稱爲內部固件,將進行擦除操作?代碼執行如何跳轉到軟件中斷處理程序?
0
A
回答
0
軟件中斷是一條指令(也是通過其他名稱,同一條指令)。處理器中的邏輯知道將模式切換到管理員或任何正確的模式,並開始執行(有點像跳轉)到向量表中地址所指示的代碼。然後在那裏有處理命令的軟件,在調用軟件中斷指令之前設置的內容告訴操作系統是什麼或有效地執行該系統調用。
在進行系統調用的應用程序層的代碼中,鏈接到應用程序中的庫/代碼從應用程序獲取參數,併爲軟件中斷設置適當的信息,執行軟件中斷,收集中斷返回並清除時的結果。
編輯。
向量表中的所有向量都以這種方式工作。甚至重置。邏輯知道事件發生的時間,中斷,數據中止,未定義的指令等。邏輯硬連線到特定地址,讀取該值,這是一個地址,然後開始在該處理程序地址執行。 swi/svc只是另一個「事件」,但我們希望直接創建vs創建一個未定義的指令或未對齊的訪問等,這些都將基本上做同樣的事情,觸發事件,正常執行停止,機器狀態可能或可能無法保存(某些百分比位於cortex-m3中,但可能取決於事件),並執行處理程序。 (在m3中沒有管理員,用戶是全尺寸的手臂)。 svc/swi是一個雖然我們想創建未定義的地方,但通常不想。硬件中斷並沒有太大的不同,但我們並沒有插入一條指令來引起它們,其他邏輯基於該邏輯中的某個事件導致它們。在所有情況下,我們(程序員)必須爲我們所關心的每個事件編寫代碼(以及我們需要處理的每個事件,涵蓋所有可能發生的事件),其中一個可能是svc/swi事件,而在那裏它不是由arm定義的,你稱之爲系統函數或者它們是如何定義的。手臂可能有一套他們使用,但你在技術上可以自由創建任何你想要的機制和任何系統調用你想要的,你只需要確保調用者和被調用者就定義達成一致,誰負責什麼。
相關問題
- 1. MIPS中斷不會跳轉到中斷處理程序
- 2. 如何從故事板中的事件處理程序跳轉到代碼
- 3. 如何在執行Android應用程序時跳轉到另一行代碼
- 4. 系統調用是否在整個軟件中斷處理程序中執行?
- 5. java thead池執行程序如何處理中斷線程
- 6. 如何中斷事件處理程序
- 7. 從x86中斷處理程序意外跳轉
- 8. 驗證執行的事件處理程序代碼
- 9. 在事件處理程序後執行代碼
- 10. 在事件處理程序結束時執行javascript代碼
- 11. 事件處理程序觸發但不執行UI代碼(MonoTouch)
- 12. Storyboard.Completed事件處理程序防止代碼執行
- 13. GXT自定義事件處理程序代碼執行多次
- 14. 如何跳過執行一行代碼?
- 15. 中斷處理程序在不同的線程中執行?
- 16. 如何從程序跳轉到Windows批處理退出
- 17. 在ashx處理程序的代碼中強制執行SSL
- 18. 程序跳過代碼行
- 19. 轉換C#代碼事件處理程序到VB.NET
- 20. 如何停止處理程序執行
- 21. 如何中斷執行程序線程
- 22. 中斷代碼執行
- 23. EXCEL VBA代碼來處理RightsWatch軟件
- 24. Visual Basic:跳轉到子程序,但不運行代碼
- 25. 在完成處理程序後執行的代碼被稱爲
- 26. ASP.NET HttpModule - 保證執行前後處理程序代碼?
- 27. Looper.loop不叫,但仍執行在處理程序代碼
- 28. 如何在代碼中將處理程序添加到ListBoxItem?
- 29. SIGPOLL(SIGIO)問題:中斷在執行處理程序
- 30. 如何將Python線程代碼轉換爲多處理代碼?
「我所指的代碼是用固件寫的」固件是一種新的編程語言嗎? – Olaf
nonono,我只是說它是一個固件代碼,你有很好的幽默感:D – JIN007