有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()是需要循环扫描的。谢谢各位大虾。
|