0
關於互聯網上的svc沒有足夠的信息。我瞭解了SVC處理程序如何工作,但是我不明白爲什麼它將寄存器R0,R1,R2,R3和R12堆疊到堆棧上。除非它有一個不存儲的目的,那麼這些寄存器中的信息對處理器來說是非常重要的。SVC HANDLER:ARM皮質m處理器
和任何一個建議如何學習ARM Cortex M3? 如何開始學習,以便不會像上面那樣基本的東西混淆。 感謝您提前
關於互聯網上的svc沒有足夠的信息。我瞭解了SVC處理程序如何工作,但是我不明白爲什麼它將寄存器R0,R1,R2,R3和R12堆疊到堆棧上。除非它有一個不存儲的目的,那麼這些寄存器中的信息對處理器來說是非常重要的。SVC HANDLER:ARM皮質m處理器
和任何一個建議如何學習ARM Cortex M3? 如何開始學習,以便不會像上面那樣基本的東西混淆。 感謝您提前
這是因爲每次調用函數時,ABI描述:
r0
- r3
可以包含的參數,可以作爲臨時寄存器。這意味着功能不需要保存它們(它們將被修改)這與r12
類似。
因此,如果SVC
調用C函數處理函數,寄存器r0
-r3
將被C函數破壞,而其他寄存器被維護。在這種情況下,硬件會自動進行堆棧,以便我們獲得擔保(如果C函數正確),則所有寄存器的值都與調用SVC之前的值相同。
請注意,對於SVC,知道這些寄存器已損壞(因爲我們知道何時調用SVC指令)是可以接受的。但其他異常(如中斷)具有相同的行爲,對於這些異常,這是非常重要的,因爲我們不知道它們何時發生。
關於一本書,我知道這本書,所以我可以告訴它:
的權威指南的ARM Cortex-M3,第二版第二版 由約瑟夫·耀
真正的一點是例外entry _itself_看起來完全像EABI函數調用(硬件負責保存調用者保存的寄存器),因此異常處理程序只是常規的C函數(注意如何沒有特殊的異常返回指令)。 – Notlikethat
先生,你能否請解釋TBB指令也.......因爲我面臨困難,我沒有得到它如何去特定情況下,爲什麼我們正在編寫DCB()之間.. –