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) 是由执行特定指令生成的同步例外。应用使用软件中断功能向受保护的系统(例如操作系统)请求提供服务,该系统只能在监控模式下执行服务。一些 ARM 文档使用“监控调用”(SVC) 这一术语,而不是“软件中断”。
C/C++ 应用可使用 SWI_ALIAS pragma 将一个软件中断号与一个函数名相关联,然后像调用函数一样来调用软件中断。如需更多信息,请参阅 节 5.11.29。
调用软件中断函数就代表着调用软件中断功能,因此向软件中断传递数据并从中返回数据就可指定为普通函数参数,传递具有以下限制:
传递到软件中断的所有参数必须驻留在四个参数寄存器中 (R0-R3)。不能通过软件栈来传递参数。因此只能传递四个参数,但以下情况除外:
对于 Cortex-M 架构,C SWI 处理程序无法返回值。其他架构中的 SWI 处理程序可能会返回值。
对于寄存器的使用,C/C++ 编译器将调用软件中断与调用函数视为等同。它假设所有入口保存寄存器均由软件中断保留,save-on-call 寄存器(其余寄存器)可由软件中断更改。