154 lines
3.8 KiB
C
154 lines
3.8 KiB
C
/**
|
||
* @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 <stdio.h>
|
||
|
||
/* -------------------------------------------------------------------------- */
|
||
/* 用到的外部变量 */
|
||
/* -------------------------------------------------------------------------- */
|
||
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
|