From 75ce4d1a9a4b024d6734b5a1fd7174abe081a4a1 Mon Sep 17 00:00:00 2001 From: godcreator02 Date: Sat, 20 Apr 2024 20:05:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B2=A1=E5=AD=98=E5=AE=8C=EF=BC=8C=E5=86=8D?= =?UTF-8?q?=E5=AD=98=E4=B8=80=E6=AC=A1=E3=80=82=E5=9B=9E=E5=8E=BB=E7=9C=8B?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=9B=BE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vscode/FSM_OOP/keytest/keyFSM_private.h | 16 +++++ vscode/FSM_OOP/template/templateFSM_private.h | 59 ++++++++----------- 2 files changed, 42 insertions(+), 33 deletions(-) diff --git a/vscode/FSM_OOP/keytest/keyFSM_private.h b/vscode/FSM_OOP/keytest/keyFSM_private.h index 2e290fe..82c4b47 100644 --- a/vscode/FSM_OOP/keytest/keyFSM_private.h +++ b/vscode/FSM_OOP/keytest/keyFSM_private.h @@ -37,6 +37,22 @@ typedef enum _State #define DEFAULT_STATE Waiting +static Event selectNextStateFcn(Waiting)(KeyFSMData *data){ + + if(data->countDelay == 10){ + return HoldCount4; + } + else if(data->countDelay == 5){ + return DelayCount3; + } + else if(data->in == Up){ + return PhsicalUp; + } + else{ + return PhsicalDown; + } +} + static void actionFcn(enter, Waiting)(KeyFSMData* data){ data->out = Idle; diff --git a/vscode/FSM_OOP/template/templateFSM_private.h b/vscode/FSM_OOP/template/templateFSM_private.h index af07c1c..55f188c 100644 --- a/vscode/FSM_OOP/template/templateFSM_private.h +++ b/vscode/FSM_OOP/template/templateFSM_private.h @@ -15,9 +15,11 @@ typedef struct _TemplateFSM FSM base; }TemplateFSM; -/* - 状态和对应的 action, exit, during 函数 - */ + +/* -------------------------------------------------------------------------- */ +/* 状态 */ +/* -------------------------------------------------------------------------- */ + typedef enum _State { @@ -29,6 +31,17 @@ typedef enum _State } State; #define DEFAULT_STATE E +/* -------------------------------------------------------------------------- */ +/* 下一个状态选择函数 */ +/* -------------------------------------------------------------------------- */ +static void selectNextStateFcn(D)(TemplateFSMData *data, TemplateFSMSignals *signals){ + +} + + +/* -------------------------------------------------------------------------- */ +/* 对应的 action, exit, during 函数 */ +/* -------------------------------------------------------------------------- */ static void actionFcn(enter, D)() { FSM_LOG(" enterD "); @@ -55,47 +68,33 @@ static void actionFcn(exit, E)() FSM_LOG(" exitE "); } -/* - 事件和对应的转移函数 - */ - -typedef enum _Event{ - Idle_Event, - Idle2D, - Idle2E, - D2E, - E2D, - - Count_Event, -}Event; -static State transitionHandler(Idle2D)() +/* -------------------------------------------------------------------------- */ +/* 转移函数 */ +/* -------------------------------------------------------------------------- */ +static void transitionHandler(Idle, D)() { FSM_LOG(" Idle2D "); - return D; } -static void delayHanlder(Idle2D)(TemplateFSMData *data){ +static void delayHanlder(Idle, D)(TemplateFSMData *data){ FSM_LOG(" DelayIdle2D"); } -static State transitionHandler(Idle2E)() +static State transitionHandler(Idle, E)() { FSM_LOG(" Idle2E "); - return E; } -static State transitionHandler(D2E)() +static State transitionHandler(D, E)() { FSM_LOG(" D2E "); - return E; } -static State transitionHandler(E2D)() +static State transitionHandler(E, D)() { FSM_LOG(" E2D "); - return D; } @@ -108,17 +107,11 @@ const static char *stateStr[] = { "Idle", "D", "E", - }; -const static char *eventStr[] = { - "Idle", - "Idle2D", - "Idle2E", - "D2E", - "E2D", }; + static void printFSM(TemplateFSM* pFSM){ FSM_LOG(" \tTemplateFSM: "); - FSM_LOG("上次事件:%s, 当前状态:%s, 预装载器溢出:%d ,动作:", eventStr[getFSMCurEvent((FSM *)pFSM)], stateStr[getFSMCurState((FSM *)pFSM)], _getPreloaderOverFlag((FSM *)pFSM)); + FSM_LOG("下次状态:%s, 当前状态:%s, 预装载器溢出:%d ,动作:", stateStr[getFSMNextState((FSM *)pFSM)], stateStr[getFSMCurState((FSM *)pFSM)], _getPreloaderOverFlag((FSM *)pFSM)); }