[AVR单片机] 实在没辙了,来这里求教

[复制链接]
3212|8
 楼主| dmcz 发表于 2007-11-23 11:24 | 显示全部楼层 |阅读模式

void fun1(void){
if(bExit)
    return;
else
    fun2();
}

void fun2(void){
if(bExit)
    return;
else
    fun1();
}
void main(void){
fun1();
while(1);
}
程序运行的时候函数A会不停的调用函数B,这样会不停的嵌套,如果想让在bExit=1的时候马上退出这两个函数而不用一级一级的出栈,或者有没有一个绝对跳转指令,该如何实现呢?
农民讲习所 发表于 2007-11-23 11:33 | 显示全部楼层

程序做到这个份上可够惨的

如果是DOS下,setjmp longjmp配对使用。
 楼主| dmcz 发表于 2007-11-23 12:27 | 显示全部楼层

呵呵,是挺惨的,忘记说清楚了用的是MEGA16,ICCAVR

工作狂人 发表于 2007-11-23 12:37 | 显示全部楼层

re:

为什么要这么做呢? 算法是不是有问题?
brotherwen 发表于 2007-11-23 12:48 | 显示全部楼层

RE

这个算法超不好,不知为何
虾虫 发表于 2007-11-23 13:40 | 显示全部楼层

除非你自己计算每一层占用的栈,然后自己控制栈释放并返

除非你自己计算每一层占用的栈,然后自己控制栈释放并返回。
hotpower 发表于 2007-11-26 03:37 | 显示全部楼层

把自己绕进去了~~~

84335262 发表于 2007-11-26 23:56 | 显示全部楼层

乱聊:

在每一个子程序开始前栈先出来四个,把里面两个丢掉外面两个保存,再进行判断,就可以做到了,不过要增加子程序的长度……
people12 发表于 2007-12-3 15:04 | 显示全部楼层

!!!!

你可造拉单片机----死机!!
你还是在来个子程序进行对比bExit=1的时候在提供调用A
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

66

帖子

0

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