必须保留预装载器,加锁做不到
This commit is contained in:
parent
ca211e646a
commit
c063cfe90f
|
@ -24,7 +24,17 @@
|
||||||
"keyfsm.h": "c",
|
"keyfsm.h": "c",
|
||||||
"fsm_public.h": "c",
|
"fsm_public.h": "c",
|
||||||
"stdio.h": "c",
|
"stdio.h": "c",
|
||||||
"assert.h": "c"
|
"assert.h": "c",
|
||||||
|
"climits": "c",
|
||||||
|
"cmath": "c",
|
||||||
|
"cstdarg": "c",
|
||||||
|
"cstdint": "c",
|
||||||
|
"cstdio": "c",
|
||||||
|
"cstdlib": "c",
|
||||||
|
"type_traits": "c",
|
||||||
|
"limits": "c",
|
||||||
|
"*.tcc": "c",
|
||||||
|
"typeinfo": "c"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
void resetBaseFSM(FSM *pFSM)
|
void resetBaseFSM(FSM *pFSM)
|
||||||
{
|
{
|
||||||
if (pFSM->privateVars.fcns.exitActionTable[pFSM->privateVars.curState] != NULL)
|
if (pFSM->privateVars.fcns.exitActionTable[pFSM->privateVars.curState] != NULL)
|
||||||
pFSM->privateVars.fcns.exitActionTable[pFSM->privateVars.curState](pFSM->data, pFSM->privateVars.childFSM);
|
pFSM->privateVars.fcns.exitActionTable[pFSM->privateVars.curState](pFSM->privateVars.data, pFSM->privateVars.childFSM);
|
||||||
|
|
||||||
pFSM->privateVars.curState = 0;
|
pFSM->privateVars.curState = 0;
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ void resetBaseFSM(FSM *pFSM)
|
||||||
static inline void setNextState(FSM* pFSM){
|
static inline void setNextState(FSM* pFSM){
|
||||||
int curState = pFSM->privateVars.curState;
|
int curState = pFSM->privateVars.curState;
|
||||||
if(curState != 0){
|
if(curState != 0){
|
||||||
pFSM->privateVars.nextState = pFSM->privateVars.fcns.selectNextState[curState](pFSM->data, pFSM->signals);
|
pFSM->privateVars.nextState = pFSM->privateVars.fcns.selectNextState[curState](pFSM->privateVars.data, pFSM->signals);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(0 == pFSM->privateVars.numChild)
|
if(0 == pFSM->privateVars.numChild)
|
||||||
|
@ -37,9 +37,9 @@ static inline void setNextState(FSM* pFSM){
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void preload(FSM* pFSM){
|
static inline void preload(FSM* pFSM){
|
||||||
if(pFSM->privateVars.preloader.isReady){
|
if(pFSM->preloader.isReady){
|
||||||
memcpy(pFSM->data, pFSM->privateVars.preloader.in, pFSM->privateVars.preloader.preloadSize);
|
memcpy(pFSM->privateVars.data, pFSM->preloader.shadowData, pFSM->preloader.size);
|
||||||
pFSM->privateVars.preloader.isReady = 0;
|
pFSM->preloader.isReady = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ void stepBaseFSM(FSM *pFSM)
|
||||||
|
|
||||||
FSMHandler *fcns = &pFSM->privateVars.fcns;
|
FSMHandler *fcns = &pFSM->privateVars.fcns;
|
||||||
int curState = pFSM->privateVars.curState;
|
int curState = pFSM->privateVars.curState;
|
||||||
void *data = pFSM->data;
|
void *data = pFSM->privateVars.data;
|
||||||
FSM **childFSM = pFSM->privateVars.childFSM;
|
FSM **childFSM = pFSM->privateVars.childFSM;
|
||||||
int index = pFSM->privateVars.curState * pFSM->privateVars.numState + pFSM->privateVars.nextState;
|
int index = pFSM->privateVars.curState * pFSM->privateVars.numState + pFSM->privateVars.nextState;
|
||||||
int nextState = pFSM->privateVars.nextState;
|
int nextState = pFSM->privateVars.nextState;
|
||||||
|
@ -103,7 +103,7 @@ FSM* newBaseFSM(int numState, int defaultState){
|
||||||
pFSM->privateVars.nextState = 0;
|
pFSM->privateVars.nextState = 0;
|
||||||
pFSM->privateVars.numChild = 0;
|
pFSM->privateVars.numChild = 0;
|
||||||
|
|
||||||
pFSM->privateVars.preloader.isReady = 0;
|
pFSM->preloader.isReady = 0;
|
||||||
|
|
||||||
pFSM->privateVars.fcns.duringActionTable = calloc(numState, sizeof(StateFuncPtr));
|
pFSM->privateVars.fcns.duringActionTable = calloc(numState, sizeof(StateFuncPtr));
|
||||||
pFSM->privateVars.fcns.enterActionTable = calloc(numState, sizeof(StateFuncPtr));
|
pFSM->privateVars.fcns.enterActionTable = calloc(numState, sizeof(StateFuncPtr));
|
||||||
|
@ -115,9 +115,6 @@ FSM* newBaseFSM(int numState, int defaultState){
|
||||||
|
|
||||||
pFSM->privateVars.fcns.childFSMStepTable = calloc(numState * numState, sizeof(ChildFSMStepFuncPtr));
|
pFSM->privateVars.fcns.childFSMStepTable = calloc(numState * numState, sizeof(ChildFSMStepFuncPtr));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
FSMVtbl vtbl = {
|
FSMVtbl vtbl = {
|
||||||
.reset = resetBaseFSM,
|
.reset = resetBaseFSM,
|
||||||
.step = stepBaseFSM,
|
.step = stepBaseFSM,
|
||||||
|
@ -176,7 +173,7 @@ void registerChildFSM(FSM *parent, FSM *child, int index){
|
||||||
}
|
}
|
||||||
|
|
||||||
const void *_getData(FSM* pFSM){
|
const void *_getData(FSM* pFSM){
|
||||||
return (const void *)pFSM->data;
|
return (const void *)pFSM->privateVars.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *_getSignals(FSM* pFSM){
|
void *_getSignals(FSM* pFSM){
|
||||||
|
@ -185,22 +182,22 @@ void *_getSignals(FSM* pFSM){
|
||||||
|
|
||||||
|
|
||||||
void *_preloadIn(FSM *pFSM){
|
void *_preloadIn(FSM *pFSM){
|
||||||
return pFSM->privateVars.preloader.in;
|
return pFSM->preloader.shadowData;
|
||||||
}
|
}
|
||||||
|
|
||||||
void _preloaderGetReady(FSM *pFSM){
|
void _preloaderGetReady(FSM *pFSM){
|
||||||
if(pFSM->privateVars.preloader.isReady){
|
if(pFSM->preloader.isReady){
|
||||||
pFSM->privateVars.preloader.isOverflow = 1;
|
pFSM->preloader.isOverflow = 1;
|
||||||
}
|
}
|
||||||
pFSM->privateVars.preloader.isReady = 1;
|
pFSM->preloader.isReady = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int _getPreloaderOverFlag(FSM *pFSM){
|
int _getPreloaderOverFlag(FSM *pFSM){
|
||||||
return pFSM->privateVars.preloader.isOverflow;
|
return pFSM->preloader.isOverflow;
|
||||||
}
|
}
|
||||||
|
|
||||||
void _clearPreloaderOverFlag(FSM *pFSM){
|
void _clearPreloaderOverFlag(FSM *pFSM){
|
||||||
pFSM->privateVars.preloader.isOverflow = 0;
|
pFSM->preloader.isOverflow = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -25,14 +25,13 @@
|
||||||
|
|
||||||
#define selectNextStateFcn(curstate) curstate##_##selectNextState
|
#define selectNextStateFcn(curstate) curstate##_##selectNextState
|
||||||
#define transitionHandler(curstate, nextstate) curstate##2##nextstate##Handler
|
#define transitionHandler(curstate, nextstate) curstate##2##nextstate##Handler
|
||||||
#define delayHanlder(curstate, nextstate) curstate##2##nextstate##DelayHandler
|
|
||||||
#define actionFcn(action, curstate) curstate##_##action##Action
|
#define actionFcn(action, curstate) curstate##_##action##Action
|
||||||
#define index(curstate, nextstate) (curstate*Count_State + nextstate)
|
#define index(curstate, nextstate) (curstate*Count_State + nextstate)
|
||||||
|
|
||||||
|
|
||||||
typedef struct _FSMHandler FSMHandler;
|
typedef struct _FSMHandler FSMHandler;
|
||||||
typedef void (*Avoid_WARNING_State_Fcns)(void *data, FSM **childFSM);
|
typedef void (*Avoid_WARNING_State_Fcns)(void *data, FSM **childFSM);
|
||||||
typedef void (*Avoid_WARNING_Delay_General_Handlers)(void *data);
|
typedef void (*Avoid_WARNING_General_Handlers)(void *data);
|
||||||
typedef void (*Avoid_WARNING_Transition_Handler)(void *data);
|
typedef void (*Avoid_WARNING_Transition_Handler)(void *data);
|
||||||
typedef void (*Avoid_WARNING_Overrider_Fcns)(FSM *pFsm);
|
typedef void (*Avoid_WARNING_Overrider_Fcns)(FSM *pFsm);
|
||||||
typedef int (*Avoid_WARNING_SelectNextState)(void *data, void *signals);
|
typedef int (*Avoid_WARNING_SelectNextState)(void *data, void *signals);
|
||||||
|
@ -42,7 +41,6 @@ typedef void (*Avoid_WARNING_void_fcns)(FSMHandler *fcns);
|
||||||
#define addSelectNextStateFcn(curstate) fcns->selectNextState[curstate] = (Avoid_WARNING_SelectNextState)selectNextStateFcn(curstate)
|
#define addSelectNextStateFcn(curstate) fcns->selectNextState[curstate] = (Avoid_WARNING_SelectNextState)selectNextStateFcn(curstate)
|
||||||
#define addStateActionFcn(type, state) fcns->type##ActionTable[state] = (Avoid_WARNING_State_Fcns)actionFcn(type, state)
|
#define addStateActionFcn(type, state) fcns->type##ActionTable[state] = (Avoid_WARNING_State_Fcns)actionFcn(type, state)
|
||||||
#define addTransitionHandler(curstate, nextstate) fcns->transitionTable[index(curstate, nextstate)] = (Avoid_WARNING_Transition_Handler)transitionHandler(curstate, nextstate)
|
#define addTransitionHandler(curstate, nextstate) fcns->transitionTable[index(curstate, nextstate)] = (Avoid_WARNING_Transition_Handler)transitionHandler(curstate, nextstate)
|
||||||
#define addDelayHandler(curstate, nextstate) fcns->transitionDelayTable[index(curstate, nextstate)] = (Avoid_WARNING_Delay_General_Handlers)delayHanlder(curstate, nextstate)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -63,10 +61,10 @@ typedef struct _FSMHandler{
|
||||||
|
|
||||||
typedef struct _FSMDataLoader
|
typedef struct _FSMDataLoader
|
||||||
{
|
{
|
||||||
void *in;
|
void *shadowData;
|
||||||
int isReady;
|
int isReady;
|
||||||
int isOverflow;
|
int isOverflow;
|
||||||
size_t preloadSize;
|
size_t size;
|
||||||
}FSMDataLoader;
|
}FSMDataLoader;
|
||||||
|
|
||||||
|
|
||||||
|
@ -78,12 +76,13 @@ typedef struct _FSMPrivateVars
|
||||||
int curState;
|
int curState;
|
||||||
int nextState;
|
int nextState;
|
||||||
|
|
||||||
FSMDataLoader preloader;
|
|
||||||
|
|
||||||
FSMHandler fcns;
|
FSMHandler fcns;
|
||||||
|
|
||||||
int numChild;
|
int numChild;
|
||||||
FSM **childFSM;
|
FSM **childFSM;
|
||||||
|
|
||||||
|
void *data;
|
||||||
|
|
||||||
}FMSPrivateVars;
|
}FMSPrivateVars;
|
||||||
|
|
||||||
|
|
||||||
|
@ -98,7 +97,7 @@ typedef struct _FSM
|
||||||
FMSPrivateVars privateVars;
|
FMSPrivateVars privateVars;
|
||||||
|
|
||||||
// protected
|
// protected
|
||||||
void *data;
|
FSMDataLoader preloader;
|
||||||
void *signals;
|
void *signals;
|
||||||
int signalSize;
|
int signalSize;
|
||||||
} FSM;
|
} FSM;
|
||||||
|
|
|
@ -30,7 +30,6 @@ typedef struct _FSMVtbl {
|
||||||
|
|
||||||
void (*initData)(FSM *pFSM); // 子类必须重新实现
|
void (*initData)(FSM *pFSM); // 子类必须重新实现
|
||||||
void (*initSignals)(FSM *pFSM); // 子类必须重新实现
|
void (*initSignals)(FSM *pFSM); // 子类必须重新实现
|
||||||
void (*resetSignals)(FSM *pFSM); // 子类必须重新实现
|
|
||||||
void (*setupHandler)(FSMHandler *fcns); // 子类必须重新实现
|
void (*setupHandler)(FSMHandler *fcns); // 子类必须重新实现
|
||||||
void (*initDataLoader)(FSM *pFSM); // 子类必须重新实现
|
void (*initDataLoader)(FSM *pFSM); // 子类必须重新实现
|
||||||
}FSMVtbl;
|
}FSMVtbl;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* @Author: godcreator02 qq974980621@gmail.com
|
* @Author: godcreator02 qq974980621@gmail.com
|
||||||
* @Date: 2024-04-20 19:02:11
|
* @Date: 2024-04-20 19:02:11
|
||||||
* @LastEditors: godcreator02 qq974980621@gmail.com
|
* @LastEditors: godcreator02 qq974980621@gmail.com
|
||||||
* @LastEditTime: 2024-04-23 15:07:57
|
* @LastEditTime: 2024-04-23 17:15:11
|
||||||
* @FilePath: \vscode\FSM_OOP\keytest\keyFSM.c
|
* @FilePath: \vscode\FSM_OOP\keytest\keyFSM.c
|
||||||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||||
*/
|
*/
|
||||||
|
@ -22,7 +22,7 @@ static void step(KeyFSM* pFSM){
|
||||||
printFSM(pFSM);
|
printFSM(pFSM);
|
||||||
stepBaseFSM((FSM *)pFSM);
|
stepBaseFSM((FSM *)pFSM);
|
||||||
|
|
||||||
KeyFSMData * data = pFSM->base.data;
|
KeyFSMData * data = pFSM->base.privateVars.data;
|
||||||
|
|
||||||
FSM_LOG("\t信号:%d, 计数%d ", data->out, data->countDelay);
|
FSM_LOG("\t信号:%d, 计数%d ", data->out, data->countDelay);
|
||||||
}
|
}
|
||||||
|
@ -34,22 +34,20 @@ static void initData(KeyFSM *pFSM){ // 必须重新实现
|
||||||
data->in = Up;
|
data->in = Up;
|
||||||
data->out = Idle;
|
data->out = Idle;
|
||||||
|
|
||||||
pFSM->base.data = data;
|
pFSM->base.privateVars.data = data;
|
||||||
|
|
||||||
pFSM->base.signals = &data->out;
|
pFSM->base.signals = &data->out;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void initDataLoader(KeyFSM *pFSM){ // 必须重新实现
|
static void initDataLoader(KeyFSM *pFSM){ // 必须重新实现
|
||||||
pFSM->base.privateVars.preloader.in = malloc(sizeof(KeyIn));
|
pFSM->base.preloader.shadowData = malloc(sizeof(KeyIn));
|
||||||
pFSM->base.privateVars.preloader.preloadSize = sizeof(KeyIn);
|
pFSM->base.preloader.size = sizeof(KeyIn);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void initSignals(KeyFSM *pFSM){
|
static void initSignals(KeyFSM *pFSM){ // 必须重新实现
|
||||||
pFSM->base.signalSize = sizeof(KeyOutSignal);
|
pFSM->base.signalSize = sizeof(KeyOutSignal);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void resetSignals(KeyFSM *pFSM){
|
|
||||||
memset(pFSM->base.signals, 0, sizeof(KeyOutSignal));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void setupHandler(FSMHandler* fcns){ // 必须重新实现
|
static void setupHandler(FSMHandler* fcns){ // 必须重新实现
|
||||||
/* ------------------------------- 添加下一个状态选择函数 ------------------------------ */
|
/* ------------------------------- 添加下一个状态选择函数 ------------------------------ */
|
||||||
|
@ -84,7 +82,7 @@ static void setupHandler(FSMHandler* fcns){ // 必须重新实现
|
||||||
addTransitionHandler(MultiDownWaiting, Waiting);
|
addTransitionHandler(MultiDownWaiting, Waiting);
|
||||||
|
|
||||||
|
|
||||||
fcns->transitionGeneralAction = (Avoid_WARNING_Delay_General_Handlers)transitionGeneralAction;
|
fcns->transitionGeneralAction = (Avoid_WARNING_General_Handlers)transitionGeneralAction;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -104,7 +102,6 @@ KeyFSM *createKeyFSM(){
|
||||||
pFSM->base.vtbl.initData = (Avoid_WARNING_Overrider_Fcns)initData;
|
pFSM->base.vtbl.initData = (Avoid_WARNING_Overrider_Fcns)initData;
|
||||||
pFSM->base.vtbl.initDataLoader = (Avoid_WARNING_Overrider_Fcns)initDataLoader;
|
pFSM->base.vtbl.initDataLoader = (Avoid_WARNING_Overrider_Fcns)initDataLoader;
|
||||||
pFSM->base.vtbl.initSignals = (Avoid_WARNING_Overrider_Fcns)initSignals;
|
pFSM->base.vtbl.initSignals = (Avoid_WARNING_Overrider_Fcns)initSignals;
|
||||||
pFSM->base.vtbl.resetSignals = (Avoid_WARNING_Overrider_Fcns)resetSignals;
|
|
||||||
|
|
||||||
constructFSM((FSM *)pFSM);
|
constructFSM((FSM *)pFSM);
|
||||||
|
|
||||||
|
|
|
@ -212,9 +212,6 @@ static State transitionHandler(DownDebouncing, Downing)(KeyFSMData* data){
|
||||||
data->out = Down;
|
data->out = Down;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void delayHanlder(DownDebouncing, Downing)(KeyFSMData* data){
|
|
||||||
data->out = Idle;
|
|
||||||
}
|
|
||||||
|
|
||||||
static State transitionHandler(UpDebouncing, MultiDownWaiting)(KeyFSMData* data){
|
static State transitionHandler(UpDebouncing, MultiDownWaiting)(KeyFSMData* data){
|
||||||
data->out = Idle;
|
data->out = Idle;
|
||||||
|
@ -266,7 +263,7 @@ const static char *stateStr[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static void printFSM(KeyFSM* pFSM){
|
static void printFSM(KeyFSM* pFSM){
|
||||||
KeyFSMData* data = pFSM->base.data;
|
KeyFSMData* data = pFSM->base.privateVars.data;
|
||||||
FSM_LOG("KeyFSM: ");
|
FSM_LOG("KeyFSM: ");
|
||||||
FSM_LOG("%d, 当前状态:%s, \t上一个下次事件:%s \t转移:", data->countDelay, stateStr[getFSMCurState((FSM *)pFSM)], stateStr[getFSMNextState((FSM *)pFSM)]);
|
FSM_LOG("%d, 当前状态:%s, \t上一个下次事件:%s \t转移:", data->countDelay, stateStr[getFSMCurState((FSM *)pFSM)], stateStr[getFSMNextState((FSM *)pFSM)]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* @Author: godcreator02 qq974980621@gmail.com
|
* @Author: godcreator02 qq974980621@gmail.com
|
||||||
* @Date: 2024-04-20 20:08:03
|
* @Date: 2024-04-20 20:08:03
|
||||||
* @LastEditors: godcreator02 qq974980621@gmail.com
|
* @LastEditors: godcreator02 qq974980621@gmail.com
|
||||||
* @LastEditTime: 2024-04-20 21:05:34
|
* @LastEditTime: 2024-04-23 17:09:52
|
||||||
* @FilePath: \vscode\FSM_OOP\template\templateFSM.c
|
* @FilePath: \vscode\FSM_OOP\template\templateFSM.c
|
||||||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||||
*/
|
*/
|
||||||
|
@ -26,39 +26,34 @@ static void step(TemplateFSM* pFSM){
|
||||||
|
|
||||||
static void initData(TemplateFSM *pFSM){ // 必须重新实现
|
static void initData(TemplateFSM *pFSM){ // 必须重新实现
|
||||||
TemplateFSMData *data = (TemplateFSMData *)malloc(sizeof(TemplateFSMData));
|
TemplateFSMData *data = (TemplateFSMData *)malloc(sizeof(TemplateFSMData));
|
||||||
|
|
||||||
TemplateFSMData tempData = {
|
TemplateFSMData tempData = {
|
||||||
.in = {
|
.external = {
|
||||||
.arrindex = 0,
|
.arrindex = 0,
|
||||||
.x = 0,
|
.x = 0,
|
||||||
},
|
},
|
||||||
.inner1 = 0,
|
.inner = {
|
||||||
.y1 = 0,
|
.inner1 = 0,
|
||||||
|
.y1 = 0,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
*data = tempData;
|
*data = tempData;
|
||||||
|
|
||||||
pFSM->base.data = data;
|
pFSM->base.privateVars.data = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void initSignals(TemplateFSM *pFSM){
|
static void initSignals(TemplateFSM *pFSM){
|
||||||
TemplateFSMSignals *signals = (TemplateFSMSignals *)malloc(sizeof(TemplateFSMSignals));
|
TemplateFSMSignals *signals = (TemplateFSMSignals *)calloc(1, sizeof(TemplateFSMSignals));
|
||||||
TemplateFSMSignals tempSignals = {
|
|
||||||
.signalA = 0,
|
|
||||||
.signalB = 0,
|
|
||||||
};
|
|
||||||
*signals = tempSignals;
|
|
||||||
pFSM->base.signals = signals;
|
pFSM->base.signals = signals;
|
||||||
|
pFSM->base.signalSize = sizeof(TemplateFSMSignals);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void resetSignals(TemplateFSM *pFSM){
|
|
||||||
memset(pFSM->base.signals, 0, sizeof(TemplateFSMSignals));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void initDataLoader(TemplateFSM *pFSM){ // 必须重新实现
|
static void initDataLoader(TemplateFSM *pFSM){ // 必须重新实现
|
||||||
pFSM->base.privateVars.preloader.in = malloc(sizeof(TemplateFSMIn));
|
pFSM->base.preloader.shadowData = malloc(sizeof(TemplateFSMExternalData));
|
||||||
pFSM->base.privateVars.preloader.preloadSize = sizeof(TemplateFSMIn);
|
pFSM->base.preloader.size = sizeof(TemplateFSMExternalData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -83,9 +78,7 @@ static void setupHandler(FSMHandler* fcns){ // 必须重新实现
|
||||||
addTransitionHandler(D, E);
|
addTransitionHandler(D, E);
|
||||||
addTransitionHandler(E, D);
|
addTransitionHandler(E, D);
|
||||||
|
|
||||||
addDelayHandler(D, E);
|
fcns->transitionGeneralAction = (Avoid_WARNING_General_Handlers)transitionGeneralAction;
|
||||||
|
|
||||||
fcns->transitionGeneralAction = &transitionGeneralAction;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -100,7 +93,6 @@ TemplateFSM *createTemplateFSM(){
|
||||||
pFSM->base.vtbl.initData = (Avoid_WARNING_Overrider_Fcns)initData;
|
pFSM->base.vtbl.initData = (Avoid_WARNING_Overrider_Fcns)initData;
|
||||||
pFSM->base.vtbl.initDataLoader = (Avoid_WARNING_Overrider_Fcns)initDataLoader;
|
pFSM->base.vtbl.initDataLoader = (Avoid_WARNING_Overrider_Fcns)initDataLoader;
|
||||||
pFSM->base.vtbl.initSignals = (Avoid_WARNING_Overrider_Fcns)initSignals;
|
pFSM->base.vtbl.initSignals = (Avoid_WARNING_Overrider_Fcns)initSignals;
|
||||||
pFSM->base.vtbl.resetSignals = (Avoid_WARNING_Overrider_Fcns)resetSignals;
|
|
||||||
|
|
||||||
pFSM->base.vtbl.setupHandler = (Avoid_WARNING_void_fcns)setupHandler;
|
pFSM->base.vtbl.setupHandler = (Avoid_WARNING_void_fcns)setupHandler;
|
||||||
|
|
||||||
|
|
|
@ -2,26 +2,33 @@
|
||||||
#define __TEMPLATE_FSM_H_
|
#define __TEMPLATE_FSM_H_
|
||||||
|
|
||||||
|
|
||||||
#define TemplateFSM_Input(pFSM) ((TemplateFSMIn *)_preloadIn((FSM *)pFSM))
|
#define TemplateFSM_Input(pFSM) ((TemplateFSMExternalData *)_preloadIn((FSM *)pFSM))
|
||||||
#define TemplateFSM_Signals(pFSM) ((TemplateFSMSignals *)_getSignals((FSM *)pFSM))
|
#define TemplateFSM_Signals(pFSM) ((TemplateFSMSignals *)_getSignals((FSM *)pFSM))
|
||||||
|
|
||||||
typedef struct _templateFSMIn
|
|
||||||
{
|
|
||||||
int arrindex;
|
|
||||||
int x;
|
|
||||||
}TemplateFSMIn;
|
|
||||||
|
|
||||||
typedef struct _templateFSMSignals
|
typedef struct _templateFSMSignals
|
||||||
{
|
{
|
||||||
int signalA;
|
int signalA;
|
||||||
int signalB;
|
int signalB;
|
||||||
}TemplateFSMSignals;
|
}TemplateFSMSignals;
|
||||||
|
|
||||||
typedef struct _templateFSMData
|
|
||||||
|
typedef struct _templateFSMExternalData
|
||||||
|
{
|
||||||
|
int arrindex;
|
||||||
|
int x;
|
||||||
|
}TemplateFSMExternalData;
|
||||||
|
|
||||||
|
typedef struct _templateFSMInnerData
|
||||||
{
|
{
|
||||||
TemplateFSMIn in;
|
|
||||||
int y1;
|
int y1;
|
||||||
int inner1;
|
int inner1;
|
||||||
|
}TemplateFSMInnerData;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _templateFSMData
|
||||||
|
{
|
||||||
|
TemplateFSMExternalData external;
|
||||||
|
TemplateFSMInnerData inner;
|
||||||
}TemplateFSMData;
|
}TemplateFSMData;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -93,10 +93,6 @@ static void transitionHandler(Idle, D)()
|
||||||
FSM_LOG(" Idle2D ");
|
FSM_LOG(" Idle2D ");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void delayHanlder(D, E)(TemplateFSMData *data){
|
|
||||||
FSM_LOG(" DelayD2E");
|
|
||||||
}
|
|
||||||
|
|
||||||
static State transitionHandler(Idle, E)()
|
static State transitionHandler(Idle, E)()
|
||||||
{
|
{
|
||||||
FSM_LOG(" Idle2E ");
|
FSM_LOG(" Idle2E ");
|
||||||
|
|
Loading…
Reference in New Issue