|
看了楼主新发的RTX教程,关于RTX的SVC中断问题还是有点疑惑:
#define os_sys_init(tsk) os_set_env(); \
_os_sys_init((U32)rt_sys_init,tsk,0,NULL)
extern void _os_sys_init(U32 p, void (*task)(void), U32 prio_stksz,
void *stk) __SVC_0;//网上查了资料,四个参数用r0~r3传递,不知对不对,#define __SVC_0 __svc_indirect(0)
到这就进SVC_Handler()里面了,
.......
MRS R0,PSP ; Read PSP
LDR R1,[R0,#24] ; Read Saved PC from Stack
LDRB R1,[R1,#-2] ; Load SVC Number
CBNZ R1,SVC_User//非零跳转
LDM R0,{R0-R3,R12} ; Read R0-R3,R12 from stack
BLX R12 ; Call SVC Function
......
疑问就在这,R12里是这么东西呢,为什么要调到R12中的地址运行。
网上资料又说APCS标准,R12此时是指令指针ip,很多说法ip = sp,或是ip = lr;想不明白,请论坛大神帮忙解答下。 |
|