FSM/vscode/FSM_OOP/template/templateFSM_private.h

154 lines
3.8 KiB
C
Raw Normal View History

2024-05-07 16:45:57 +08:00
/**
* @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
2024-01-23 20:05:30 +08:00
#define __TEMPLATE_PRIVATE_FSM_H_
#include "FSM_protected.h"
#include "templateFSM.h"
#include "templateFSM_state.h"
2024-01-23 20:05:30 +08:00
#include <stdio.h>
/* -------------------------------------------------------------------------- */
/* 用到的外部变量 */
/* -------------------------------------------------------------------------- */
extern int arrindex;
extern int x;
2024-01-23 20:05:30 +08:00
/* -------------------------------------------------------------------------- */
/* 继承基类 */
/* -------------------------------------------------------------------------- */
typedef struct TemplateFSM
2024-01-23 20:05:30 +08:00
{
FSM base;
}TemplateFSM;
2024-01-23 20:05:30 +08:00
/* -------------------------------------------------------------------------- */
/* 下一个状态选择函数 */
/* -------------------------------------------------------------------------- */
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 函数 */
/* -------------------------------------------------------------------------- */
2024-01-23 20:05:30 +08:00
static void actionFcn(enter, D)()
{
FSM_LOG(" enterD ");
2024-01-23 20:05:30 +08:00
}
static void actionFcn(during, D)()
{
FSM_LOG(" duringD ");
2024-01-23 20:05:30 +08:00
}
static void actionFcn(exit, D)()
{
FSM_LOG(" exitD ");
2024-01-23 20:05:30 +08:00
}
static void actionFcn(enter, E)()
{
FSM_LOG(" enterE ");
2024-01-23 20:05:30 +08:00
}
static void actionFcn(during, E)()
{
FSM_LOG(" duringE ");
2024-01-23 20:05:30 +08:00
}
static void actionFcn(exit, E)()
{
FSM_LOG(" exitE ");
2024-01-23 20:05:30 +08:00
}
/* -------------------------------------------------------------------------- */
/* 转移函数 */
/* -------------------------------------------------------------------------- */
static void transitionGeneralAction(FSM *pFSM){
FSM_LOG("general");
}
// static void transitionGeneralAction(TemplateFSMData *data){
// FSM_LOG("general");
// }
static void transitionHandler(Idle, D)()
2024-01-23 20:05:30 +08:00
{
FSM_LOG(" Idle2D ");
2024-01-23 20:05:30 +08:00
}
static void transitionHandler(Idle, E)()
2024-01-23 20:05:30 +08:00
{
FSM_LOG(" Idle2E ");
2024-01-23 20:05:30 +08:00
}
static void transitionHandler(D, E)(TemplateFSMData *data, int *delayedIndex)
2024-01-23 20:05:30 +08:00
{
*delayedIndex = index(D, E);
FSM_LOG(" D2E ");
2024-01-23 20:05:30 +08:00
}
static void transitionHandler(E, D)()
2024-01-23 20:05:30 +08:00
{
FSM_LOG(" E2D ");
2024-01-23 20:05:30 +08:00
}
/* -------------------------------------------------------------------------- */
/* 打印调试 */
/* -------------------------------------------------------------------------- */
2024-01-23 20:05:30 +08:00
const static char *stateStr[] = {
"Idle",
"D",
"E",
};
2024-01-23 20:05:30 +08:00
static void printFSM(TemplateFSM* pFSM){
FSM_LOG(" \tTemplateFSM: ");
FSM_LOG("预装载器溢出:%d, 当前状态:%s, 动作:", _getPreloaderOverFlag((FSM *)pFSM), stateStr[getFSMCurState((FSM *)pFSM)]);
2024-01-23 20:05:30 +08:00
}
#endif