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

📄 statemachine.h

📁 嵌入式软件构件:TMR计时器管理、CLK实时时钟、KEY键盘扫描、LED数码显示、LCD显示、COMM串口通信
💻 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 + -