打印
[ZLG-MCU]

请教:关于软中断的问题

[复制链接]
1194|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nqlf|  楼主 | 2009-3-14 20:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

在头文件中声明:__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吗?

相关帖子

沙发
linhai1986| | 2009-3-14 23:49 | 只看该作者

进来学习~~

使用特权

评论回复
板凳
xiaoxin1986| | 2009-3-15 00:30 | 只看该作者

帮顶~~~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

22

帖子

0

粉丝