打印
[MCU]

初学单片机 简单问题求助

[复制链接]
1335|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
asbnasbn|  楼主 | 2013-7-22 22:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有3个工作过程,用3个函数表示,a();b();c();

这3个工作过程可以组合成几个需要的工作状态,根据实际需要,比如可以a,b.(a执行完后执行b然后结束),可以a,c。或者a,b,c单独执行等。已经弄出需要a,b,c工作的标志位。比如对应x,y,z。弄完了调试了下 还是有点问题,a(),b(),c()函数中有的有定时器定时的,而且a(),b(),c()是按顺序执行的。所以我弄了各函数开始与结束标志位,比如a_kaishi=1为开始标志,=0为结束标志。我的思路是只有检测到相应结束标志位才执行下个函数。看代码:
a()
{a_kaishi=1;
执行工作;
a_kaishi=0;
}

b()
{b_kaishi=1;
执行工作;
b_kaishi=0;
}

c()
{c_kaishi=1;
执行工作;
c_kaishi=0;
}

void workflow(void)
{
if(x==1)
{
  a();
  if(a_kaishi==0)
   {
    if(y==1)
      {
         b();
         if(b_kaishi==0)
         {
           if(z==1)
           c();
         }
      }
    else
      {
         if(z==1)
         c();
      }
   }   
}
else
{
  if(y==1)
    {
      b();
      if(b_kaishi==0)
      {      
        if(z==1)
         {
           c();
         }
      }
    }
  else
    {
      if(z==1)
      c();
    }  
  }
}

void main ()
{
sysinit();
while(1)
  {
    scan();//扫描
   workflow();
  }
}
不知道这样写有没有问题,靠谱么.或者有没有更好的写法。另外执行完之后,怎么让工作停下来,因为当工作结束了,而workflow()一直在循环中,又开始执行。scan()是需要循环扫描的。谢谢各位大虾。

相关帖子

沙发
dirtwillfly| | 2013-7-22 23:43 | 只看该作者
可以在workflow()下面增加个if语句,如果工作结束就break跳出循环
如果a(),b(),c()三个函数中同时都有定时器定时,这里你要仔细考虑好

使用特权

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

本版积分规则

5

主题

15

帖子

0

粉丝