C51中断子程序中能否使用return

[复制链接]
22645|49
xwj 发表于 2009-10-15 16:39 | 显示全部楼层
中断中,不管你是return 萝卜;还是return 白菜;
都没用的。

参数直接丢弃或者编译报错;然后,跳到最后一个括号处,执行隐藏的恢复现场、RETI
xwj 发表于 2009-10-15 16:40 | 显示全部楼层
10楼是对的,一般编译器也都会这样子设计

不是隐藏的默认的“return”。编译器在编译一个普通的C51函数的时候,会在函数的结尾处生成RET指令,而编译C51的中断服务函数的时候,会在结尾处生成RETI指令。可以理解为,那个结束的大括号就是告诉编译器这个函数 ...
arm_fan168 发表于 2009-10-15 15:33
acmilann 发表于 2009-10-15 16:42 | 显示全部楼层
可以用,我当go语句用,可以直接退出中断。
 楼主| 864 发表于 2009-10-15 16:49 | 显示全部楼层
21# xwj
谢谢,我想bhsdlmj的意思应该是普通函数里
 楼主| 864 发表于 2009-10-15 16:49 | 显示全部楼层
23# acmilann
好 谢谢
wudilong 发表于 2009-10-15 16:51 | 显示全部楼层
第一次来发现这个论坛大家好热情啊
 楼主| 864 发表于 2009-10-15 16:55 | 显示全部楼层
26# wudilong
的确很热情 切身体会啊
computer00 发表于 2009-10-15 17:17 | 显示全部楼层
可以在函数内部的任何一个地方return的,包括C51的中断函数。你觉得到某个地方需要退出该函数时,写上return即可。

评分

参与人数 1威望 +1 收起 理由
bhsdlmj + 1

查看全部评分

bhsdlmj 发表于 2009-10-15 17:22 | 显示全部楼层
 楼主| 864 发表于 2009-10-15 18:41 | 显示全部楼层
28# computer00
好 谢谢 好心人真多啊
openmake 发表于 2009-10-15 19:35 | 显示全部楼层
应该可以吧
xuezhongaozhu 发表于 2009-10-15 20:00 | 显示全部楼层
如果在中断程序语句之间加return,就是退出中断的意思,退出中断这个函数;如果在中断程序末尾加return,那几乎一点作用都没有,加不加也没什么影响,除非定义的中断函数还有其它特殊用途,return可以返回一个控制。
中断子程序也只不过是一个函数而已,只是有特殊意义。
huangqi412 发表于 2009-10-15 20:19 | 显示全部楼层
圈圈成ufo了。。。
原野之狼 发表于 2009-10-15 22:48 | 显示全部楼层
return一定要放在最后一行,没有这个说法!
放哪行都行。
虾军师 发表于 2009-10-16 09:39 | 显示全部楼层
假设在中断服务程序中有某个条件达到了需要退出中断
我一般这样写:
void *****()
{
……
……
if(条件符合)
{
goto loop;
}
……
……
loop:
}
李冬发 发表于 2009-10-16 10:02 | 显示全部楼层
为什么不试一下呢,很难有试得条件吗?
xwj 发表于 2009-10-16 10:06 | 显示全部楼层
羡慕,圈圈牌ufo一出现就有人加分
zq1987731 发表于 2009-10-16 10:11 | 显示全部楼层
当然可用,估计是好多人根深蒂固的思想认为"void"返回类型是不允许用return的:L
void XXX(void)
{
    if(条件1)
    {
        执行语句1;  
        return;
    }
    else if(条件2)
    {
        执行语句2;
        return;
    }
    else
    {
         执行语句3;
        return;
    }
}
xwj 发表于 2009-10-16 10:14 | 显示全部楼层
汗~

估计没人这么认为吧?
HWM 发表于 2009-10-16 10:21 | 显示全部楼层
return的“语义”会跟随具体的“函数类别”(包括ISR)变化地。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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