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)]); }