ZHCUAV8W january 1998 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
軟件中斷 (SWI) 是由執(zhí)行特定指令生成的同步例外。應(yīng)用使用軟件中斷功能向受保護(hù)的系統(tǒng)(例如操作系統(tǒng))請(qǐng)求提供服務(wù),該系統(tǒng)只能在監(jiān)控模式下執(zhí)行服務(wù)。一些 ARM 文檔使用“監(jiān)控調(diào)用”(SVC) 這一術(shù)語,而不是“軟件中斷”。
C/C++ 應(yīng)用可使用 SWI_ALIAS pragma 將一個(gè)軟件中斷號(hào)與一個(gè)函數(shù)名相關(guān)聯(lián),然后像調(diào)用函數(shù)一樣來調(diào)用軟件中斷。如需更多信息,請(qǐng)參閱 節(jié) 5.11.29。
調(diào)用軟件中斷函數(shù)就代表著調(diào)用軟件中斷功能,因此向軟件中斷傳遞數(shù)據(jù)并從中返回?cái)?shù)據(jù)就可指定為普通函數(shù)參數(shù),傳遞具有以下限制:
傳遞到軟件中斷的所有參數(shù)必須駐留在四個(gè)參數(shù)寄存器中 (R0-R3)。不能通過軟件棧來傳遞參數(shù)。因此只能傳遞四個(gè)參數(shù),但以下情況除外:
對(duì)于 Cortex-M 架構(gòu),C SWI 處理程序無法返回值。其他架構(gòu)中的 SWI 處理程序可能會(huì)返回值。
對(duì)于寄存器的使用,C/C++ 編譯器將調(diào)用軟件中斷與調(diào)用函數(shù)視為等同。它假設(shè)所有入口保存寄存器均由軟件中斷保留,save-on-call 寄存器(其余寄存器)可由軟件中斷更改。