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

📄 g_stmcpro.cpp

📁 通用的状态机程序,一般用于嵌入式领域,如单片机
💻 CPP
字号:

/**************************************************************************
* Module Name:          gstmcpro.cpp
* Identification:       %W%
* Date:                 2006.11
*
* Author:               Yu lianqing            
* Copyright (c) 
* ALL RIGHTS RESERVED
*
* Revisions of %M%: (latest revision on top)
* #.##  Name       Date      Description
* ----  ---------- --------  ----------------------------------------------
*
* Implementation notes:
*
* -------------------------------------------------------------------------
* Description:  通用状态机处理模块.
*
*   根据具体应用
*
*   1. 把 event_1、event_2 等换成你自己的编号;
*
*   2. 把 st0_event1_process、st0_event2_process、...、st0_default_process 
*      等换成你自己的函数名;
*
*   3. 把 state_0、state_1、...、state_n 换成你自己的标识符, 也可以不换.
*
**************************************************************************/

/*
  若其它地方已有定义, 请注释掉以下 3 行,
  include 相应的头文件 
*/
typedef unsigned char	    BYTE;
typedef unsigned short int  WORD;
typedef unsigned int        DWORD;


/* 状态机定义 */
typedef struct
{
   WORD event;  		       /* 事件号 */
   void (*stp)(BYTE *pMsg); /* 对该事件的处理函数 */

} STATE_MC_T;   


/* 状态-事件表 */

/* state 0 */
STATE_MC_T  state_0[ ] = 
{ 
	{ event_1, st0_event1_process },	/* 状态0下对事件1的处理,处理函数st0_event1_process */
	{ event_2, st0_event2_process },	/* 状态0下对事件2的处理,处理函数st0_event2_process */

   ... ...

	{ 0xFFFF,  st0_default_process }	/* 默认处理 */
};

/* state 1 */
STATE_MC_T  state_1[ ] = 
{
	{ event_1, st1_event1_process },	/* 状态1下对事件1的处理,处理函数st1_event1_process */
	{ event_2, st1_event2_process },	/* 状态1下对事件2的处理,处理函数st1_event2_process */

   ... ...

	{ 0xFFFF, st1_default_process }	/* 默认处理 */
};

... ...

/* state n */
STATE_MC_T  state_n[ ] = 
{
	{ event_1, stn_event1_process },	/* 状态n下对事件1的处理,处理函数stn_event1_process */
	{ event_2, stn_event2_process },	/* 状态n下对事件2的处理,处理函数stn_event2_process */

   ... ...

	{ 0xFFFF, stn_default_process }	/* 默认处理 */
};

/* 状态-事件跳转表 */
STATE_MC_T  *StateEventJump[MAX_STATE] = 
{ 
   state_0, state_1, ... ..., state_n
};


/* 有限状态机处理入口函数 */
int event_process(BYTE CurState, WORD EventNo)
{
	STATE_MC_T *jbase;

	if(CurState >= MAX_STATE)
	{
		return -1;
	}

	/* 查表,跳转到相应的服务函数 */
	jbase = StateEventJump[CurState];
	while((jbase->event != EventNo)&&
		   (jbase->event != 0xFFFF)) 
	{
			jbase++;
	}

	jbase->stp(*pMsg);

	return 0;
}

⌨️ 快捷键说明

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