求助: 怎样避免顺序执行的死循环

2020-01-30 14:04发布

本帖最后由 lryxr2507 于 2013-3-14 16:20 编辑

求助大师:
   遇到一台设备,有较多的感应器,每一个动作必须按顺序动作,每一次动作后必须感应到感应器信号后才能执行下一个动作,在这里就出现一个问题,在执行的过程中,如果需要终止动作回到初始状态,这时因为再等待感应点已进入死循环,无法终止程序,即使在中断里面强制执行了,但死循环后面的程序还在等待,无法完全退出.当然我用过break 等方法进行返回,可是当有很多动作时就麻烦了,怕执行过程中错开感应器.

例如:

  if(run_flag)                //运行标志开
   {
        A=0;                      //动作1执行
     while(A_D);               //等待1动作的下感应      请教各位:怎样较好地避免这种死循环     
       A=1;                      //动作1停止
     while(A_U);               //等待1动作的上感应
     B=0;                      //动作2执行
     while(B_A);               //等待2动作的前感应   

     A=0;                      //动作3执行  ;与动作1相同
     while(A_D);               //等待3动作的下感应
     A=1;                      //动作3停止
     while(A_U);               //等待3动作的上感应
     B=1;                      //动作2停止
     while(B_B);               //等待2动作的后感应   
   
    ........

    run_flag=0;                //关闭运行
   
   ''''''
  }  


请各位不吝赐教,表示感谢.
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
CK_CN
1楼-- · 2020-01-31 11:16
限制等待时间
chinabn
2楼-- · 2020-01-31 12:13
 精彩回答 2  元偷偷看……
user_first
3楼-- · 2020-01-31 13:47
do{ if(0==run_flag) goto XXX; } while(A_D);
lryxr2507
4楼-- · 2020-01-31 17:10
感谢各位的回复,基本上有了新的思路,主要采用了jswd0810  的结构,再次感谢.
jswd0810
5楼-- · 2020-01-31 22:40
lryxr2507 发表于 2013-3-16 09:20
感谢各位的回复,基本上有了新的思路,主要采用了jswd0810  的结构,再次感谢.

我觉得我的结构还行,我现在手里项目就用的它,不过还是提醒一下,程序里不要有阻塞的地方,比如for()这样的东东来执行循环延时,不然实时性不太好

一周热门 更多>