|
发表于 2011-5-18 22:58:55
|
显示全部楼层
回复【185楼】yanshengdian
加上
if()
{
///大堆代码
}
的都是状态机了?
-----------------------------------------------------------------------
重點是狀態機的精神,不是實做的方式。你可以用if敘述,也可以用switch敘述,更可以用函式指標敘述。
例如要做這樣的狀態機。
(原文件名:ex01.jpg)
用函式指標可以這樣寫:寫法很多種,看你的應用、場合、任務的複雜程度。
#include <stdio.h>
#include <stdlib.h>
void (*mission_excute)() = 0;
unsigned char event;
void S0();
void S1();
void S2();
int main()
{
int ix;
event = 0;
mission_excute = S0;
for(ix=0;ix<10;ix++)
{
mission_excute();
event++;
event = event & 0x03;
}
return 0;
}
void S0()
{
printf("Into S0:%2d\n",event);
if(event == 0)
{
mission_excute = S1;
printf("Goto S1:%2d\n",event);
}
else if(event == 2)
{
mission_excute = S2;
printf("Goto S2:%2d\n",event);
}
else{}
}
void S1()
{
printf("Into S1:%2d\n",event);
if(event == 2)
{
mission_excute = S2;
printf("Goto S2:%2d\n",event);
}
else if(event == 1)
{
printf("Stay S1:%2d\n",event);
}
else{}
}
void S2()
{
printf("Into S2:%2d\n",event);
if(event == 3)
{
printf("Stay S2:%2d\n",event);
}
else if(event == 0)
{
printf("Goto S1:%2d\n",event);
}
else{}
} |
|