diff --git a/test_on_28377/.cproject b/test_on_28377/.cproject
index 37be928..e223d50 100644
--- a/test_on_28377/.cproject
+++ b/test_on_28377/.cproject
@@ -28,21 +28,21 @@
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
+
-
-
-
+
+
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/test_on_28377/main.c b/test_on_28377/main.c
index db97563..d38510c 100644
--- a/test_on_28377/main.c
+++ b/test_on_28377/main.c
@@ -79,13 +79,13 @@ void keyFSMTest(){
tic();
Step(keyFSM);
+ toc(index++);
if(data->out != Idle){
- toc(++index);
printf("%s\n", keyStr[data->out]);
}
else{
- toc(0);
+ index--;
}
DELAY_US(20*1000);
diff --git a/vscode/FSM_OOP/baseFSM/FSM.c b/vscode/FSM_OOP/baseFSM/FSM.c
index 55e5d08..a169665 100644
--- a/vscode/FSM_OOP/baseFSM/FSM.c
+++ b/vscode/FSM_OOP/baseFSM/FSM.c
@@ -25,9 +25,9 @@ static inline void setNextState(FSM* pFSM){
pFSM->privateVars.nextState = pFSM->privateVars.fcns.selectNextState[curState](pFSM->data, pFSM->signals);
}
- if(0 == pFSM->privateVars.numChild){
+ if(0 == pFSM->privateVars.numChild)
return;
- }
+
for (int i = 0; i < pFSM->privateVars.numChild; i++)
{
@@ -43,12 +43,16 @@ static inline void preload(FSM* pFSM){
}
}
+static inline void resetSignals(FSM *pFSM){
+ memset(pFSM->signals, 0, pFSM->signalSize);
+}
void stepBaseFSM(FSM *pFSM)
{
preload(pFSM);
setNextState(pFSM);
- pFSM->vtbl.resetSignals(pFSM);
+ // pFSM->vtbl.resetSignals(pFSM);
+ resetSignals(pFSM);
FSMHandler *fcns = &pFSM->privateVars.fcns;
int curState = pFSM->privateVars.curState;
@@ -69,7 +73,8 @@ void stepBaseFSM(FSM *pFSM)
if (fcns->enterActionTable[nextState] != NULL)
fcns->enterActionTable[nextState](data, childFSM);
}
- fcns->transitionGeneralAction(data); // 通用状态转移函数
+ if(fcns->transitionGeneralAction != NULL)
+ fcns->transitionGeneralAction(data); // 通用状态转移函数
pFSM->privateVars.curState = nextState;
}
else if(curState == 0){ // 处理刚运行进入的默认状态
diff --git a/vscode/FSM_OOP/baseFSM/FSM_protected.h b/vscode/FSM_OOP/baseFSM/FSM_protected.h
index 59231cb..e44d777 100644
--- a/vscode/FSM_OOP/baseFSM/FSM_protected.h
+++ b/vscode/FSM_OOP/baseFSM/FSM_protected.h
@@ -100,6 +100,7 @@ typedef struct _FSM
// protected
void *data;
void *signals;
+ int signalSize;
} FSM;
diff --git a/vscode/FSM_OOP/keytest/keyFSM.c b/vscode/FSM_OOP/keytest/keyFSM.c
index 30524e0..a9a4a2f 100644
--- a/vscode/FSM_OOP/keytest/keyFSM.c
+++ b/vscode/FSM_OOP/keytest/keyFSM.c
@@ -2,7 +2,7 @@
* @Author: godcreator02 qq974980621@gmail.com
* @Date: 2024-04-20 19:02:11
* @LastEditors: godcreator02 qq974980621@gmail.com
- * @LastEditTime: 2024-04-23 14:47:23
+ * @LastEditTime: 2024-04-23 15:07:57
* @FilePath: \vscode\FSM_OOP\keytest\keyFSM.c
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
@@ -44,7 +44,7 @@ static void initDataLoader(KeyFSM *pFSM){ // 必须重新实现
}
static void initSignals(KeyFSM *pFSM){
-
+ pFSM->base.signalSize = sizeof(KeyOutSignal);
}
static void resetSignals(KeyFSM *pFSM){