#ifndef __TEMPLATE_PRIVATE_FSM_H_ #define __TEMPLATE_PRIVATE_FSM_H_ #include "FSM_protected.h" #include "templateFSM.h" #include /* 继承基类 */ typedef struct _TemplateFSM { // 继承父类 FSM base; }TemplateFSM; /* -------------------------------------------------------------------------- */ /* 状态 */ /* -------------------------------------------------------------------------- */ typedef enum _State { Idle, D, E, Count_State, } State; #define DEFAULT_STATE E /* -------------------------------------------------------------------------- */ /* 下一个状态选择函数 */ /* -------------------------------------------------------------------------- */ static void selectNextStateFcn(D)(TemplateFSMData *data, TemplateFSMSignals *signals){ } /* -------------------------------------------------------------------------- */ /* 对应的 action, exit, during 函数 */ /* -------------------------------------------------------------------------- */ static void actionFcn(enter, D)() { FSM_LOG(" enterD "); } static void actionFcn(during, D)() { FSM_LOG(" duringD "); } static void actionFcn(exit, D)() { FSM_LOG(" exitD "); } static void actionFcn(enter, E)() { FSM_LOG(" enterE "); } static void actionFcn(during, E)() { FSM_LOG(" duringE "); } static void actionFcn(exit, E)() { FSM_LOG(" exitE "); } /* -------------------------------------------------------------------------- */ /* 转移函数 */ /* -------------------------------------------------------------------------- */ static void transitionHandler(Idle, D)() { FSM_LOG(" Idle2D "); } static void delayHanlder(Idle, D)(TemplateFSMData *data){ FSM_LOG(" DelayIdle2D"); } static State transitionHandler(Idle, E)() { FSM_LOG(" Idle2E "); } static State transitionHandler(D, E)() { FSM_LOG(" D2E "); } static State transitionHandler(E, D)() { FSM_LOG(" E2D "); } /* 用户自定义事件选择逻辑—————————————————begin */ const static char *stateStr[] = { "Idle", "D", "E", }; static void printFSM(TemplateFSM* pFSM){ FSM_LOG(" \tTemplateFSM: "); FSM_LOG("下次状态:%s, 当前状态:%s, 预装载器溢出:%d ,动作:", stateStr[getFSMNextState((FSM *)pFSM)], stateStr[getFSMCurState((FSM *)pFSM)], _getPreloaderOverFlag((FSM *)pFSM)); } #endif