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

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条回答
mandey
1楼-- · 2020-01-30 17:15
加标志,跳出,再执行的时候就知道下一步该做哪了。
或者用状态机,啥状态执行啥,
lryxr2507
2楼-- · 2020-01-30 20:05
mandey 发表于 2013-3-14 16:25
加标志,跳出,再执行的时候就知道下一步该做哪了。
或者用状态机,啥状态执行啥, ...

也尝试这种方法,但里面有些动作是相同的,这样的标志将相当多,最主要的是感应器在动作时感应时间很短,怕在怕判断时错过.
mandey
3楼-- · 2020-01-30 21:23
 精彩回答 2  元偷偷看……
jswd0810
4楼-- · 2020-01-30 23:10
我的程序结构给你看看:
void step0()
{
     ................................
        if(x1) step_num=1;
}

void step1()
{
     ................................
        if(x2) step_num=2;
}
......................
void auto()
{
     switch(step_num)
     case 0:
     {
     }break;
     case 0:
     {
     }break;
     ...............
    default:break;
}

注意程序中不要有阻塞的地方,不停循环扫描
mcuyrj
5楼-- · 2020-01-31 02:56
加标志,或者用switch
ap0705307
6楼-- · 2020-01-31 08:07
用中断检测传感器吧,不然你要不停的扫描...

一周热门 更多>