📄 g_stmcpro.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 + -