⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 state.c

📁 实现Linux状态转移功能
💻 C
字号:
#include<stdio.h>
#include<stdlib.h>
#define A  10
#define B  20
#define D  40
#define AB 1020
#define BA 2010
#define BD 2040
#define DB 4020
#define AD 1040
#define DA 4010
#define AA 1010
#define act1 1
#define act2 2

struct statepoint
{
int atstate;
int event;
int nextstate;
int action;
};
struct statepoint currentpoint;
struct statepoint statemachine[4];
int tablelookup(int state,int event)
{
 int i;int nextstate;
 for(i=0;i<4;i++)
 {
 
 if(state==statemachine[i].atstate && event==statemachine[i].event)
 {
  nextstate=statemachine[i].nextstate;
  currentpoint.nextstate=statemachine[i].nextstate;
  currentpoint.action=statemachine[i].action;
 }
 return(nextstate); 
 } 
}

printtable()
{
printf("%d %d %d\n",statemachine[0].atstate,statemachine[0].event,
                  statemachine[0].nextstate,statemachine[0].action );

printf("%d %d %d\n",statemachine[1].atstate,statemachine[1].event,
                       statemachine[1].nextstate,statemachine[1].action);

printf("%d %d %d\n",statemachine[2].atstate,statemachine[2].event,
                        statemachine[2].nextstate,statemachine[2].action);

printf("%d %d %d\n",statemachine[3].atstate,statemachine[3].event,
                        statemachine[3].nextstate,statemachine[3].action);

} 
machineinit()
{
 statemachine[0].atstate=A;
 statemachine[0].nextstate=D; 
 statemachine[1].atstate=A;
 statemachine[1].nextstate=B;
 statemachine[2].atstate=D;
 statemachine[2].nextstate=B;
 statemachine[3].atstate=B;
 statemachine[3].nextstate=D;
 
 statemachine[0].event=AD;
 statemachine[1].event=AB;
 statemachine[2].event=DB;
 statemachine[3].event=BA;
 statemachine[0].action=act1;
 statemachine[1].action=act1;
 statemachine[2].action=act1;
 statemachine[3].action=act2;
 printtable();

}
main()
{
 int i; 
 machineinit();
 printf("what state?");
 scanf("%d,&currentpoint.atstate");
 printf("The state is %d\n",currentpoint.atstate);
 printf("what event?");
 scanf("%d",&currentpoint.event);
 printf("The event is %d\n",currentpoint.event);
 for(i=1;i<=5;i++)
 {
 currentpoint.nextstate=tablelookup(currentpoint.atstate,currentpoint.event);
 currentpoint.atstate=currentpoint.nextstate;
 printtable();
 scanf("%d",&currentpoint.event);
 printf(" Incoming event is %d \n",currentpoint.event);
 } 

} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -