diff --git a/vscode/FSM_OOP/baseFSM/FSM.c b/vscode/FSM_OOP/baseFSM/FSM.c index 97be13f..946b286 100644 --- a/vscode/FSM_OOP/baseFSM/FSM.c +++ b/vscode/FSM_OOP/baseFSM/FSM.c @@ -47,6 +47,7 @@ void stepBaseFSM(FSM *pFSM) { preload(pFSM); setEvent(pFSM); + pFSM->vtbl.resetSignals(pFSM); FSMHandler *fcns = &pFSM->privateVars.fcns; int curState = pFSM->privateVars.curState; diff --git a/vscode/FSM_OOP/baseFSM/FSM_public.h b/vscode/FSM_OOP/baseFSM/FSM_public.h index 769adec..a394855 100644 --- a/vscode/FSM_OOP/baseFSM/FSM_public.h +++ b/vscode/FSM_OOP/baseFSM/FSM_public.h @@ -22,6 +22,7 @@ typedef struct _FSMVtbl { void (*step)(FSM *pFSM); // 子类重新实现可以添加一些打印信息 void (*initData)(FSM *pFSM); // 子类必须重新实现 void (*initSignals)(FSM *pFSM); // 子类必须重新实现 + void (*resetSignals)(FSM *pFSM); // 子类必须重新实现 void (*setupHandler)(FSMHandler *fcns); // 子类必须重新实现 void (*initDataLoader)(FSM *pFSM); // 子类必须重新实现 }FSMVtbl; diff --git a/vscode/FSM_OOP/template/main.c b/vscode/FSM_OOP/template/main.c index e65cd5d..f553d87 100644 --- a/vscode/FSM_OOP/template/main.c +++ b/vscode/FSM_OOP/template/main.c @@ -22,7 +22,7 @@ int main(){ if(i == 10){ TemplateFSM_Signals(pFSM)->signalA = 1; } - if(i == 12){ + if(i == 11){ TemplateFSM_Signals(pFSM)->signalB = 1; } diff --git a/vscode/FSM_OOP/template/templateFSM.c b/vscode/FSM_OOP/template/templateFSM.c index cd0d26d..43376d4 100644 --- a/vscode/FSM_OOP/template/templateFSM.c +++ b/vscode/FSM_OOP/template/templateFSM.c @@ -1,5 +1,6 @@ #include #include +#include #include "FSM_protected.h" #include "templateFSM.h" @@ -28,11 +29,9 @@ static Event ceventArr[20] = { static Event selectEvent(TemplateFSMData *data, TemplateFSMSignals *signals){ // 必须重新实现 if(signals->signalA){ - signals->signalA = 0; return E2D; } if(signals->signalB){ - signals->signalB = 0; return D2E; } @@ -70,6 +69,11 @@ static void initSignals(TemplateFSM *pFSM){ pFSM->base.signals = signals; } +static void resetSignals(TemplateFSM *pFSM){ + memset(pFSM->base.signals, 0, sizeof(TemplateFSMSignals)); +} + + static void initDataLoader(TemplateFSM *pFSM){ // 必须重新实现 pFSM->base.privateVars.preloader.in = malloc(sizeof(TemplateFSMIn)); @@ -107,6 +111,7 @@ TemplateFSM *createTemplateFSM(){ pFSM->base.vtbl.initData = (Avoid_WARNING_Overrider_Fcns)initData; pFSM->base.vtbl.initDataLoader = (Avoid_WARNING_Overrider_Fcns)initDataLoader; pFSM->base.vtbl.initSignals = (Avoid_WARNING_Overrider_Fcns)initSignals; + pFSM->base.vtbl.resetSignals = (Avoid_WARNING_Overrider_Fcns)resetSignals; pFSM->base.vtbl.selectEvent = (Avoid_WARNING_SelectEvent)selectEvent; pFSM->base.vtbl.setupHandler = (Avoid_WARNING_void_fcns)setupHandler;