/** * @file templateFSM_private.h * @author 天神 (dalaoshi@stu.xjtu.edu.cn) * @brief 用来声明状态、状态函数等。这个文件只能被templateFSM.c引用一次! * @version 2.1 * @date 2024-05-07 * * @copyright 天神创意无限公司 2024 * */ #ifdef __TEMPLATE_PRIVATE_FSM_H_ #error This file can only be included once!!! #else #define __TEMPLATE_PRIVATE_FSM_H_ #include "FSM_protected.h" #include "templateFSM.h" #include "templateFSM_state.h" #include /* -------------------------------------------------------------------------- */ /* 用到的外部变量 */ /* -------------------------------------------------------------------------- */ extern int arrindex; extern int x; /* -------------------------------------------------------------------------- */ /* 继承基类 */ /* -------------------------------------------------------------------------- */ typedef struct TemplateFSM { FSM base; }TemplateFSM; /* -------------------------------------------------------------------------- */ /* 下一个状态选择函数 */ /* -------------------------------------------------------------------------- */ static State selectNextStateFcn(Idle)(TemplateFSMData *data, FSMSignals *signals){ return E; } static State selectNextStateFcn(D)(TemplateFSMData *data, FSMSignals *signals){ if(getSignal(signals, Signal_A)){ signals->lastTriggeredSignal = Signal_A; return E; } else if(arrindex == 0){ return E; } return Idle; } static State selectNextStateFcn(E)(TemplateFSMData *data, FSMSignals *signals){ if(getSignal(signals, Signal_A)){ signals->lastTriggeredSignal = Signal_A; return D; } else if(x == 0){ return D; } return Idle; } /* -------------------------------------------------------------------------- */ /* 对应的 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 transitionGeneralAction(FSM *pFSM){ FSM_LOG("general"); } // static void transitionGeneralAction(TemplateFSMData *data){ // FSM_LOG("general"); // } static void transitionHandler(Idle, D)() { FSM_LOG(" Idle2D "); } static void transitionHandler(Idle, E)() { FSM_LOG(" Idle2E "); } static void transitionHandler(D, E)(TemplateFSMData *data, int *delayedIndex) { *delayedIndex = index(D, E); FSM_LOG(" D2E "); } static void transitionHandler(E, D)() { FSM_LOG(" E2D "); } /* -------------------------------------------------------------------------- */ /* 打印调试 */ /* -------------------------------------------------------------------------- */ const static char *stateStr[] = { "Idle", "D", "E", }; static void printFSM(TemplateFSM* pFSM){ FSM_LOG(" \tTemplateFSM: "); FSM_LOG("预装载器溢出:%d, 当前状态:%s, 动作:", _getPreloaderOverFlag((FSM *)pFSM), stateStr[getFSMCurState((FSM *)pFSM)]); } #endif