把信号清零放到step里做

This commit is contained in:
godcreator 2024-04-19 16:11:24 +08:00
parent 6503f3c126
commit bdd83a3cd1
4 changed files with 10 additions and 3 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;
}

View File

@ -1,5 +1,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#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;