diff --git a/test_on_28377/.cproject b/test_on_28377/.cproject
index 27deca7..37be928 100644
--- a/test_on_28377/.cproject
+++ b/test_on_28377/.cproject
@@ -15,8 +15,8 @@
-
-
-
+
diff --git a/test_on_28377/.launches/02code_speed_test.launch b/test_on_28377/.launches/02code_speed_test.launch
deleted file mode 100644
index 59a7ca6..0000000
--- a/test_on_28377/.launches/02code_speed_test.launch
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test_on_28377/.launches/FSM_test.launch b/test_on_28377/.launches/FSM_test.launch
index 164d719..94a4d3b 100644
--- a/test_on_28377/.launches/FSM_test.launch
+++ b/test_on_28377/.launches/FSM_test.launch
@@ -1,28 +1,8 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
@@ -32,10 +12,5 @@
-
-
-
-
-
-
+
diff --git a/test_on_28377/main.c b/test_on_28377/main.c
index c7b5e9f..db97563 100644
--- a/test_on_28377/main.c
+++ b/test_on_28377/main.c
@@ -30,33 +30,33 @@ int isDown = 0;
-ChildFSM *cFSM;
-ParentFSM *pFSM;
-void childTest(){
-
- cFSM = createChildFSM();
- pFSM = createParentFSM();
-
- setChildNum((pFSM), 1);
- registerChildFSM((pFSM), (cFSM), 0);
-
- for (int i = 0; i < 15; i++)
- {
- ParentFSM_Input(pFSM)->arrindex = i;
- SetPreloaderReady(pFSM);
-
- ChildFSM_Input(cFSM)->arrindex = i;
- SetPreloaderReady(cFSM);
-
- ChildFSMData* data = getData((FSM *)(cFSM));
- printf(" %d ", data->arrindex);
-
- tic();
- _vptrFSM((FSM *)pFSM)->step((FSM *)pFSM);
- toc(index++);
- printf("\n");
- }
-}
+//ChildFSM *cFSM;
+//ParentFSM *pFSM;
+//void childTest(){
+//
+// cFSM = createChildFSM();
+// pFSM = createParentFSM();
+//
+// setChildNum((pFSM), 1);
+// registerChildFSM((pFSM), (cFSM), 0);
+//
+// for (int i = 0; i < 15; i++)
+// {
+// ParentFSM_Input(pFSM)->arrindex = i;
+// SetPreloaderReady(pFSM);
+//
+// ChildFSM_Input(cFSM)->arrindex = i;
+// SetPreloaderReady(cFSM);
+//
+// ChildFSMData* data = getData((FSM *)(cFSM));
+// printf(" %d ", data->arrindex);
+//
+// tic();
+// _vptrFSM((FSM *)pFSM)->step((FSM *)pFSM);
+// toc(index++);
+// printf("\n");
+// }
+//}
@@ -67,14 +67,15 @@ KeyFSMData* data;
void keyFSMTest(){
keyFSM = createKeyFSM();
- data = getData((FSM *)keyFSM);
+ data = _getData((FSM *)keyFSM);
printf("hello 28377\n");
while(1){
*KeyFSM_Input(keyFSM) = !GPIO_ReadPin(INPUT_GPIO);
- SetPreloaderReady(keyFSM);
+ PreloaderGetReady(keyFSM);
+
tic();
Step(keyFSM);
@@ -125,8 +126,8 @@ void main(void)
GPIO_SetupPinOptions(INPUT_GPIO, GPIO_INPUT, GPIO_PULLUP);
- childTest();
-// keyFSMTest();
+// childTest();
+ keyFSMTest();
// funptrTest();
}
diff --git a/test_on_28377/targetConfigs/TMS320F28377D.ccxml b/test_on_28377/targetConfigs/TMS320F28377D.ccxml
index 5d896ab..85ba6c4 100644
--- a/test_on_28377/targetConfigs/TMS320F28377D.ccxml
+++ b/test_on_28377/targetConfigs/TMS320F28377D.ccxml
@@ -1,62 +1,22 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/vscode/FSM_OOP/baseFSM/FSM.c b/vscode/FSM_OOP/baseFSM/FSM.c
index 4c4d4a7..c12c621 100644
--- a/vscode/FSM_OOP/baseFSM/FSM.c
+++ b/vscode/FSM_OOP/baseFSM/FSM.c
@@ -62,18 +62,18 @@ void stepBaseFSM(FSM *pFSM)
fcns->delayedIndex = 0;
}
- if (fcns->transitionTable[index] != NULL)
- {
- if (fcns->exitActionTable[curState] != NULL)
- fcns->exitActionTable[curState](data, childFSM);
-
-
- (*fcns->transitionTable[index])(data, &fcns->delayedIndex);
- fcns->transitionGeneralAction(data);
-
- if (fcns->enterActionTable[nextState] != NULL)
- fcns->enterActionTable[nextState](data, childFSM);
+ if(nextState && curState != nextState){ // 状态切换
+ if (fcns->transitionTable[index] != NULL) // 有特定的状态转移函数
+ {
+ if (fcns->exitActionTable[curState] != NULL)
+ fcns->exitActionTable[curState](data, childFSM);
+ (*fcns->transitionTable[index])(data, &fcns->delayedIndex);
+
+ if (fcns->enterActionTable[nextState] != NULL)
+ fcns->enterActionTable[nextState](data, childFSM);
+ }
+ fcns->transitionGeneralAction(data); // 通用状态转移函数
pFSM->privateVars.curState = nextState;
}
else if(curState == 0){ // 处理刚运行进入的默认状态
diff --git a/vscode/FSM_OOP/keytest/keyFSM.c b/vscode/FSM_OOP/keytest/keyFSM.c
index 9c0f7d5..8ad5662 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 13:45:50
+ * @LastEditTime: 2024-04-23 14:30:18
* @FilePath: \vscode\FSM_OOP\keytest\keyFSM.c
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
@@ -80,7 +80,10 @@ static void setupHandler(FSMHandler* fcns){ // 必须重新实现
addTransitionHandler(UpDebouncing, MultiDownWaiting);
addTransitionHandler(MultiDownDebouncing, MultiDowning);
+ addDelayHandler(MultiDownDebouncing, MultiDowning);
+
addTransitionHandler(Downing, Holding);
+ addTransitionHandler(MultiDownWaiting, Waiting);
fcns->transitionGeneralAction = (Avoid_WARNING_Delay_General_Handlers)transitionGeneralAction;
diff --git a/vscode/FSM_OOP/keytest/keyFSM_private.h b/vscode/FSM_OOP/keytest/keyFSM_private.h
index a8562e8..198d81f 100644
--- a/vscode/FSM_OOP/keytest/keyFSM_private.h
+++ b/vscode/FSM_OOP/keytest/keyFSM_private.h
@@ -240,10 +240,17 @@ static State transitionHandler(MultiDownDebouncing, MultiDowning)(KeyFSMData* da
*delayedIndex = index(MultiDownDebouncing, MultiDowning);
}
+static void delayHanlder(MultiDownDebouncing, MultiDowning)(KeyFSMData* data){
+ data->out = Idle;
+}
+
static State transitionHandler(Downing, Holding)(KeyFSMData* data, int *delayedIndex){
data->out = Hold;
}
+static State transitionHandler(MultiDownWaiting, Waiting)(KeyFSMData* data){
+ data->countMultiDown = 0;
+}
@@ -256,17 +263,17 @@ const static char *stateStr[] = {
"DownDebouncing",
"Downing",
"Holding",
+ "HoldUpDebouncing",
"UpDebouncing",
"MultiDownWaiting",
"MultiDowning",
- "HoldUpDebouncing",
"MultiDownDebouncing",
};
static void printFSM(KeyFSM* pFSM){
KeyFSMData* data = pFSM->base.data;
FSM_LOG("KeyFSM: ");
- FSM_LOG("%d, 当前状态:%s, \t当前事件:%s \t转移:", data->countDelay, stateStr[getFSMCurState((FSM *)pFSM)], stateStr[getFSMNextState((FSM *)pFSM)]);
+ FSM_LOG("%d, 当前状态:%s, \t上一个下次事件:%s \t转移:", data->countDelay, stateStr[getFSMCurState((FSM *)pFSM)], stateStr[getFSMNextState((FSM *)pFSM)]);
}