FSM/vscode/FSM_OOP/template/templateFSM_private.h

154 lines
3.8 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @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