在头文件中声明:__swi(0) int multiply_two(int, int);
C函数中调用:result = multiply_two( 2, 4 );
中断处理汇编部分: SWI_Handler STMFD sp!, {r0-r3, r12, lr} MOV r1, sp LDREQ r0, [lr,#-4] BICEQ r0, r0, #0xFF000000 BL C_SWI_Handler 中断C部分: void C_SWI_Handler( int swi_num, int *regs ) { switch( swi_num ) { case 0: regs[0] = regs[0] * regs[1]; break; .... } 许多资料说汇编部分调用C处理函数时将R0,R1分别传递给C函数的两个参数,那么R1中的值就是堆栈的栈顶地址了,那么regs[0]=LR,regs[1]=R12,那么C函数让他们相乘?哪位知道的能否告诉我上面理解是否正确? 调用multiply_two( 2, 4 )中的2,4怎么传递到中断服务函数中的? 最后结果是8吗?
|