diff --git a/vscode/CMakeLists.txt b/vscode/CMakeLists.txt index c2ab643..db5c3bf 100644 --- a/vscode/CMakeLists.txt +++ b/vscode/CMakeLists.txt @@ -6,7 +6,7 @@ include_directories(${PROJECT_SOURCE_DIR}/FSM_OOP/baseFSM) aux_source_directory(${PROJECT_SOURCE_DIR}/FSM_OOP/baseFSM SRC_FSM_OOP) -#set(keytest 789) +set(keytest 789) # set(child_parent 789) if(DEFINED keytest) include_directories(${PROJECT_SOURCE_DIR}/FSM_OOP/keytest) diff --git a/vscode/FSM_OOP/keytest/keyFSM.c b/vscode/FSM_OOP/keytest/keyFSM.c index b12e837..b8b0467 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 17:15:11 + * @LastEditTime: 2024-04-23 19:37:03 * @FilePath: \vscode\FSM_OOP\keytest\keyFSM.c * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE */ @@ -14,19 +14,9 @@ #include "keyFSM.h" #include "keyFSM_private.h" -/* - 重载函数,有些是纯虚的必须重新实现,有些可以不重新实现直接用父类的 -*/ - -static void step(KeyFSM* pFSM){ - printFSM(pFSM); - _stepFSM((FSM *)pFSM); - - KeyFSMData * data = pFSM->base.privateVars.data; - - FSM_LOG("\t信号:%d, 计数%d ", data->out, data->countDelay); -} - +/* -------------------------------------------------------------------------- */ +/* 纯虚函数,允许调用privateVars */ +/* -------------------------------------------------------------------------- */ static void initData(KeyFSM *pFSM){ // 必须重新实现 KeyFSMData *data = (KeyFSMData *)malloc(sizeof(KeyFSMData)); data->countDelay = 0; @@ -34,14 +24,14 @@ static void initData(KeyFSM *pFSM){ // 必须重新实现 data->in = Up; data->out = Idle; - pFSM->base.privateVars.data = data; + pFSM->base.data = data; pFSM->base.signals = &data->out; } static void initDataLoader(KeyFSM *pFSM){ // 必须重新实现 - pFSM->base.preloader.shadowData = malloc(sizeof(KeyIn)); - pFSM->base.preloader.size = sizeof(KeyIn); + pFSM->base.privateVars.preloader.shadowData = malloc(sizeof(KeyIn)); + pFSM->base.privateVars.preloader.size = sizeof(KeyIn); } static void initSignals(KeyFSM *pFSM){ // 必须重新实现 @@ -85,6 +75,20 @@ static void setupHandler(FSMHandler* fcns){ // 必须重新实现 fcns->transitionGeneralAction = (Avoid_WARNING_General_Handlers)transitionGeneralAction; } + +/* -------------------------------------------------------------------------- */ +/* 其他重新实现的函数,父类已有实现,实现多态 */ +/* -------------------------------------------------------------------------- */ +static void step(KeyFSM* pFSM){ + printFSM(pFSM); + stepBaseFSM(BASE_FSM(pFSM)); + + KeyFSMData * data = pFSM->base.data; + + FSM_LOG("\t信号:%d, 计数%d ", data->out, data->countDelay); +} + + /* 唯一外界调用的函数 */ @@ -95,9 +99,8 @@ KeyFSM *createKeyFSM(){ pFSM = (KeyFSM *)newBaseFSM(Count_State, DEFAULT_STATE); #ifndef DSP28377 - pFSM->base.pureVtbl.step = (Avoid_WARNING_Overrider_Fcns)step; + pFSM->base.step = (Avoid_WARNING_Overrider_Fcns)step; #endif - pFSM->base.pureVtbl.setupHandler = (Avoid_WARNING_void_fcns)setupHandler; pFSM->base.pureVtbl.initData = (Avoid_WARNING_Overrider_Fcns)initData; pFSM->base.pureVtbl.initDataLoader = (Avoid_WARNING_Overrider_Fcns)initDataLoader; diff --git a/vscode/FSM_OOP/keytest/keyFSM_private.h b/vscode/FSM_OOP/keytest/keyFSM_private.h index 516ee20..48122bb 100644 --- a/vscode/FSM_OOP/keytest/keyFSM_private.h +++ b/vscode/FSM_OOP/keytest/keyFSM_private.h @@ -263,7 +263,7 @@ const static char *stateStr[] = { }; static void printFSM(KeyFSM* pFSM){ - KeyFSMData* data = pFSM->base.privateVars.data; + 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)]); }