From bdd83a3cd1cedc616b043e97cd929a965257f5cf Mon Sep 17 00:00:00 2001 From: godcreator <974980621@qq.com> Date: Fri, 19 Apr 2024 16:11:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=8A=E4=BF=A1=E5=8F=B7=E6=B8=85=E9=9B=B6?= =?UTF-8?q?=E6=94=BE=E5=88=B0step=E9=87=8C=E5=81=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vscode/FSM_OOP/baseFSM/FSM.c | 1 + vscode/FSM_OOP/baseFSM/FSM_public.h | 1 + vscode/FSM_OOP/template/main.c | 2 +- vscode/FSM_OOP/template/templateFSM.c | 9 +++++++-- 4 files changed, 10 insertions(+), 3 deletions(-) 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;