|
在ARM7和ARM9中,SWI函数是运行在Supervisor模式下的, 能接受参数,并返回值,跟普通函数使用起来一样。编译器隐藏了SWI函数和普通函数的区别, 调用SWI函数实际是调用一个SWI指令,执行到SWI指令时,ARM被改到Supervisor模式运行,并阻塞IRQ请求(注意:并没有阻止FIQ请求)。当ARM离开Supervisor模式, 中断重新打开。从Supervisor模式返回,是用MOVS指令实现的,(MOVS pc, lr) 它改变PC, 也恢复原来的CPSR。
参考:[url=http://zhiwei.li/text/2009/07/arm%E7%9A%84%E8%BD%AF%E4%BB%B6%E4%B8%AD%E6%96%ADswi%E5%92%8C%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8system-call/][/url] |
|