[ZLG-MCU] 请教:关于软中断的问题

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

进来学习~~

  
xiaoxin1986 发表于 2009-3-15 00:30 | 显示全部楼层

帮顶~~~

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

22

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部