把状态的定义单独拉一个文件,把FSM的privatevars也单列一个文件,这样可以在cla里使用

This commit is contained in:
TrashGod 2024-07-06 17:34:20 +08:00
parent 27acc2bb1b
commit 50b9788e6a
13 changed files with 145 additions and 96 deletions

View File

@ -37,7 +37,8 @@
"typeinfo": "c",
"templatefsm.h": "c",
"templatefsm_private.h": "c",
"keyfsm_private.h": "c"
"keyfsm_private.h": "c",
"childfsm_state.h": "c"
},

View File

@ -7,7 +7,7 @@ aux_source_directory(${PROJECT_SOURCE_DIR}/FSM_OOP/baseFSM SRC_FSM_OOP)
# set(keytest 789)
#set(child_parent 789)
set(child_parent 789)
if(DEFINED keytest)
include_directories(${PROJECT_SOURCE_DIR}/FSM_OOP/keytest)
aux_source_directory(${PROJECT_SOURCE_DIR}/FSM_OOP/keytest SRC_FSM_USR)

View File

@ -152,7 +152,7 @@ const void *_getData(FSM* pFSM){
return (const void *)pFSM->data;
}
void _setSignal(FSM *pFSM, Uint16 signalFlag){
void _setSignal(FSM *pFSM, unsigned int signalFlag){
pFSM->signals.all |= (1 << signalFlag);
}

View File

@ -16,49 +16,12 @@
#include <string.h>
#include "FSM_protected.h"
#include "FSM_private_vars.h"
typedef struct FSMHandler FSMHandler;
typedef struct FSM FSM;
typedef struct FSMSignals FSMSignals;
/* -------------------------------------------------------------------------- */
/* private数据类型 */
/* -------------------------------------------------------------------------- */
/**
* @brief
* @deprecated
*
*/
typedef struct FSMDataLoader
{
void *shadowData;
int isReady;
int isOverflow;
size_t size;
}FSMDataLoader;
/**
* @brief 访
*
*/
typedef struct FSMPrivateVars
{
int numState; /**< 状态数量 */
int defaultState; /**< Idle状态不能停留必须指定一个初始状态 */
int curState; /**< 当前状态 */
int nextState; /**< nextState为Idle代表状态机不发生变化 */
int index; /**< 状态转移函数表对应的标号 */
FSMHandler fcns; /**< 状态函数表 */
// FSM *childFSM; /**< 限定只能有一个子状态机 */
FSM **childFSMTable; /**< 每个状态都可配置一个子状态机 */
FSMDataLoader preloader; /**< @deprecated 弃用 */
}FSMPrivateVars;
/**
* @brief

View File

@ -0,0 +1,63 @@
/**
* @file FSM_private.h
* @author (dalaoshi@stu.xjtu.edu.cn)
* @brief 使
* @details 访
* @version 2.1
* @date 2024-05-07
*
* @copyright 2024
*
*/
#ifndef __FSM_PRIVATE_VARS_H_
#define __FSM_PRIVATE_VARS_H_
#include "FSM_protected.h"
typedef struct FSMHandler FSMHandler;
typedef struct FSM FSM;
typedef struct FSMSignals FSMSignals;
/* -------------------------------------------------------------------------- */
/* private数据类型 */
/* -------------------------------------------------------------------------- */
/**
* @brief
* @deprecated
*
*/
typedef struct FSMDataLoader
{
void *shadowData;
int isReady;
int isOverflow;
unsigned long long size;
}FSMDataLoader;
/**
* @brief 访
*
*/
typedef struct FSMPrivateVars
{
int numState; /**< 状态数量 */
int defaultState; /**< Idle状态不能停留必须指定一个初始状态 */
int curState; /**< 当前状态 */
int nextState; /**< nextState为Idle代表状态机不发生变化 */
int index; /**< 状态转移函数表对应的标号 */
FSMHandler fcns; /**< 状态函数表 */
// FSM *childFSM; /**< 限定只能有一个子状态机 */
FSM **childFSMTable; /**< 每个状态都可配置一个子状态机 */
FSMDataLoader preloader; /**< @deprecated 弃用 */
}FSMPrivateVars;
#endif

View File

@ -84,8 +84,8 @@ typedef struct FSMHandler{
*/
typedef struct FSMSignals
{
Uint16 all; /**< 外部信号 */
Uint16 lastTriggeredSignal; /**< 上一次触发的外部信号,用于信号清除 */
unsigned int all; /**< 外部信号 */
unsigned int lastTriggeredSignal; /**< 上一次触发的外部信号,用于信号清除 */
}FSMSignals;
@ -141,10 +141,10 @@ void registerChildFSM(FSM *parent, FSM *child, int state);
/* -------------------------------------------------------------------------- */
/* 内联函数 */
/* -------------------------------------------------------------------------- */
static inline void clearSignal(FSMSignals *signals, Uint16 signalFlag){
static inline void clearSignal(FSMSignals *signals, unsigned int signalFlag){
signals->all &= ~(1 << signalFlag);
}
static inline Uint16 getSignal(FSMSignals *signals, Uint16 signalFlag){
static inline unsigned int getSignal(FSMSignals *signals, unsigned int signalFlag){
return (signals->all >> signalFlag) & 1;
}
static inline void clearAllSignals(FSMSignals *signals){

View File

@ -11,8 +11,6 @@
#ifndef __FSM_PUBLIC_H_
#define __FSM_PUBLIC_H_
typedef unsigned int Uint16;
typedef unsigned long Uint32;
#define BASE_FSM(ptr) ((FSM *)(ptr))
#define BASE_PTR (FSM *)
@ -45,7 +43,7 @@ int getFSMNextState(FSM *pFSM);
/* ------------------------------ Data和Signals ------------------------------ */
const void *_getData(FSM* pFSM);
void _setSignal(FSM *pFSM, Uint16 signalFlag);
void _setSignal(FSM *pFSM, unsigned int signalFlag);
/* ---------------------------------- 预装载器 ---------------------------------- */
void *_preloadIn(FSM *pFSM);

View File

@ -7,6 +7,7 @@
#include "FSM_protected.h"
#include "parentFSM.h"
#include "parentFSM_state.h"
#include <stdio.h>
@ -18,23 +19,6 @@ typedef struct ParentFSM
FSM base;
}ParentFSM;
/* -------------------------------------------------------------------------- */
/* 状态定义 */
/* -------------------------------------------------------------------------- */
/**
* @brief Idle和Count_State必须占据开头和结尾两个位置
*
*/
typedef enum _State
{
Idle, /**< 必须在开头,并且枚举值=0表示空状态 */
A,
B,
C,
Count_State, /**< 必须在结尾,用来统计状态数量 */
} State;
/* -------------------------------------------------------------------------- */
/* 下一个状态选择函数 */

View File

@ -7,6 +7,7 @@
#include "FSM_protected.h"
#include "childFSM.h"
#include "childFSM_state.h"
#include <stdio.h>
@ -18,22 +19,7 @@ typedef struct ChildFSM
FSM base;
}ChildFSM;
/* -------------------------------------------------------------------------- */
/* 状态定义 */
/* -------------------------------------------------------------------------- */
/**
* @brief Idle和Count_State必须占据开头和结尾两个位置
*
*/
typedef enum _State
{
Idle, /**< 必须在开头,并且枚举值=0 */
D,
E,
Count_State, /**< 必须在结尾,用来统计状态数量 */
} State;
/* -------------------------------------------------------------------------- */
/* 下一个状态选择函数 */

View File

@ -0,0 +1,22 @@
#ifndef __CHILD_FSM_STATE_H_
#define __CHILD_FSM_STATE_H_
/* -------------------------------------------------------------------------- */
/* 状态定义 */
/* -------------------------------------------------------------------------- */
/**
* @brief Idle和Count_State必须占据开头和结尾两个位置
*
*/
typedef enum _State
{
Idle, /**< 必须在开头,并且枚举值=0 */
D,
E,
Count_State, /**< 必须在结尾,用来统计状态数量 */
} State;
#endif

View File

@ -0,0 +1,24 @@
#ifndef __PARENT_FSM_STATE_H_
#define __PARENT_FSM_STATE_H_
/* -------------------------------------------------------------------------- */
/* 状态定义 */
/* -------------------------------------------------------------------------- */
/**
* @brief Idle和Count_State必须占据开头和结尾两个位置
*
*/
typedef enum _State
{
Idle, /**< 必须在开头,并且枚举值=0表示空状态 */
A,
B,
C,
Count_State, /**< 必须在结尾,用来统计状态数量 */
} State;
#endif

View File

@ -17,6 +17,7 @@
#include "FSM_protected.h"
#include "templateFSM.h"
#include "templateFSM_state.h"
#include <stdio.h>
/* -------------------------------------------------------------------------- */
@ -34,22 +35,7 @@ typedef struct TemplateFSM
FSM base;
}TemplateFSM;
/* -------------------------------------------------------------------------- */
/* 状态定义 */
/* -------------------------------------------------------------------------- */
/**
* @brief Idle和Count_State必须占据开头和结尾两个位置
*
*/
typedef enum _State
{
Idle, /**< 必须在开头,并且枚举值=0 */
D,
E,
Count_State, /**< 必须在结尾,用来统计状态数量 */
} State;
/* -------------------------------------------------------------------------- */
@ -119,7 +105,7 @@ static void actionFcn(exit, E)()
/* -------------------------------------------------------------------------- */
/* 转移函数 */
/* -------------------------------------------------------------------------- */
static void transitionGeneralAction(FSM pFSM){
static void transitionGeneralAction(FSM *pFSM){
FSM_LOG("general");
}

View File

@ -0,0 +1,22 @@
#ifndef __TEMPLATE_FSM_STATE_H_
#define __TEMPLATE_FSM_STATE_H_
/* -------------------------------------------------------------------------- */
/* 状态定义 */
/* -------------------------------------------------------------------------- */
/**
* @brief Idle和Count_State必须占据开头和结尾两个位置
*
*/
typedef enum _State
{
Idle, /**< 必须在开头,并且枚举值=0 */
D,
E,
Count_State, /**< 必须在结尾,用来统计状态数量 */
} State;
#endif