📄 statemachine.h
字号:
/*****************************************************************************Filename : StateMachine.H 事件分发和状态转换头文件* Programmer : Haven**Date : 2007.9.25**DESCRIPTION: 定义了预留的事件信号,状态转换和初始转换的宏定义。***************************************************************************/#ifdef FK_SM_GLOBALS#define SM_EXT#else#define SM_EXT extern#endif//下面是被系统占用的事件信号#define EMPTY_SIG 0#define ENTRY_SIG 1 /**< 进入动作信号 */#define EXIT_SIG 2 /**< 退出动作信号 */#define INIT_SIG 3 /**< 初始转换信号 */#define TIMEOUT_SIG 4 /**< 时间事件信号 */#define KEYDOWN_SIG 5 /**< 按键事件信号 */#define USER_SIG 6 /**< 用户应用程序可以使用的第一个信号 *///用户信号从这开始#ifndef EVENT_PARAM_SIZE #define EVENT_PARAM_SIZE 0#endif#if (EVENT_PARAM_SIZE == 0)#elif (EVENT_PARAM_SIZE == 1) typedef INT8U EVENT_PARAM;#elif (EVENT_PARAM_SIZE == 2) typedef INT16U EVENT_PARAM;#elif (EVENT_PARAM_SIZE == 4) typedef INT32U EVENT_PARAM;#endiftypedef struct fsmtag FSM;typedef void (*STAT_PTR)(FSM *me);struct fsmtag { STAT_PTR StatFunPtr; EVENT_SIG EventSig; #if (EVENT_PARAM_SIZE != 0) EVENT_PARAM EventParam; #endif };#define SIG(me_) (((FSM *)(me_))->EventSig)#if (EVENT_PARAM_SIZE != 0)#define PAR(me_) (((FSM *)(me_))->EventParam)#endif #define FsmCtor(me_, initial_) \ (((FSM *)me_)->StatFunPtr = (STAT_PTR)(initial_), \ SIG(me_) = (EVENT_SIG)INIT_SIG)#define TRAN(target_) \ (((FSM *)me)->StatFunPtr = (STAT_PTR)(target_), \ ((FSM *)me)->EventSig = (EVENT_SIG)0) //为执行进入和退出动作。#define INIT_TRAN(target_) TRAN(target_)//下面if内是关于层次式状态机定义#if HFSM_EN struct hfsmtag; typedef STAT_PTR (*HFSM_STAT_PTR)(struct hfsmtag *me);typedef STAT_PTR FSM_STAT_PTR;typedef struct hfsmtag { HFSM_STAT_PTR StatFunPtr; EVENT_SIG EventSig; #if (EVENT_PARAM_SIZE != 0) EVENT_PARAM EventParam; #endif } HFSM;#define HfsmCtor(me_, initial_) do { \ ((HFSM *)me_)->StatFunPtr = (HFSM_STAT_PTR)(initial_); \ SIG(me_) = (EVENT_SIG)INIT_SIG; \} while (0)#endif SM_EXT void FsmDispatch(FSM *me); #if HFSM_ENSM_EXT STAT_PTR HfsmTop(HFSM *me); SM_EXT void HfsmInit(HFSM *me);SM_EXT void HfsmDispatch(HFSM *me);#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -