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