diff --git a/test_on_28377/.cproject b/test_on_28377/.cproject
index 203d62c..728e41b 100644
--- a/test_on_28377/.cproject
+++ b/test_on_28377/.cproject
@@ -54,7 +54,6 @@
diff --git a/test_on_28377/main.c b/test_on_28377/main.c
index 44dcbae..edf2554 100644
--- a/test_on_28377/main.c
+++ b/test_on_28377/main.c
@@ -81,7 +81,7 @@ void childFSMTest(){
for (int k = 0; k < 15; k++)
{
- printf("第%d次: ",k+1);
+ printf("i: ",k+1);
SetSignal(pFSM, i[k]);
SetSignal(cFSM, j[k]);
diff --git a/vscode/CMakeLists.txt b/vscode/CMakeLists.txt
index 198660d..ef1c80d 100644
--- a/vscode/CMakeLists.txt
+++ b/vscode/CMakeLists.txt
@@ -7,7 +7,7 @@ aux_source_directory(${PROJECT_SOURCE_DIR}/FSM_OOP/baseFSM SRC_FSM_OOP)
# set(keytest 789)
-set(child_parent 789)
+#set(child_parent 789)
if(DEFINED keytest)
include_directories(${PROJECT_SOURCE_DIR}/FSM_OOP/keytest)
aux_source_directory(${PROJECT_SOURCE_DIR}/FSM_OOP/keytest SRC_FSM_USR)
diff --git a/vscode/FSM_OOP/baseFSM/FSM.c b/vscode/FSM_OOP/baseFSM/FSM.c
index 3be674b..394720f 100644
--- a/vscode/FSM_OOP/baseFSM/FSM.c
+++ b/vscode/FSM_OOP/baseFSM/FSM.c
@@ -41,11 +41,11 @@ static inline void updateNextState(FSM* pFSM){
*
* @param pFSM 状态机变量的基类指针
*/
-static void exitFSM(FSM *pFSM)
+static void shutFSM(FSM *pFSM)
{
int curState = getCurState(pFSM);
if(hasChildFSM(pFSM, curState)){
- exitFSM(getChildFSM(pFSM, curState));
+ shutFSM(getChildFSM(pFSM, curState));
}
doExit(pFSM);
setCurState(pFSM, FSM_Idle);
@@ -89,7 +89,7 @@ void stepBaseFSM(FSM *pFSM)
// 退出子状态机
if(hasChildFSM(pFSM, curState)){
FSM *cFSM = getChildFSM(pFSM, curState);
- exitFSM(cFSM);
+ shutFSM(cFSM);
}
doExit(pFSM);
@@ -128,10 +128,14 @@ void _stepFSM(FSM *pFSM){
pFSM->publicFcns.step(pFSM);
}
-int getFSMCurState(FSM *pFSM){
+const char * _curState2ASCII(FSM *pFSM){
+ return pFSM->publicFcns.curState2ASCII(pFSM);
+}
+
+inline int getFSMCurState(FSM *pFSM){
return pFSM->privateVars->curState;
}
-int getFSMNextState(FSM *pFSM){
+inline int getFSMNextState(FSM *pFSM){
return pFSM->privateVars->nextState;
}
@@ -152,6 +156,7 @@ void _setSignal(FSM *pFSM, Uint16 signalFlag){
pFSM->signals.all |= (1 << signalFlag);
}
+
/**
* @brief
* @deprecated 弃用
diff --git a/vscode/FSM_OOP/baseFSM/FSM_protected.h b/vscode/FSM_OOP/baseFSM/FSM_protected.h
index 516d7f7..2b764f1 100644
--- a/vscode/FSM_OOP/baseFSM/FSM_protected.h
+++ b/vscode/FSM_OOP/baseFSM/FSM_protected.h
@@ -52,6 +52,7 @@ typedef void (*Avoid_WARNING_State_Fcns)(void *data);
typedef void (*Avoid_WARNING_General_Handlers)(void *data);
typedef void (*Avoid_WARNING_Transition_Handler)(void *data);
typedef void (*Avoid_WARNING_Overrider_Fcns)(FSM *pFSM);
+typedef const char * (*Avoid_WARNING_2ASCII_Fcns)(FSM *pFSM);
typedef void (*Avoid_WARNING_ResetSignals_Fcns)(FSMSignals* signals, void *);
typedef void (*Avoid_WARNING_loadData_Fcns)(void*);
typedef int (*Avoid_WARNING_SelectNextState)(void *data, FSMSignals* signals);
diff --git a/vscode/FSM_OOP/baseFSM/FSM_public.h b/vscode/FSM_OOP/baseFSM/FSM_public.h
index 707f71c..ad9bfa3 100644
--- a/vscode/FSM_OOP/baseFSM/FSM_public.h
+++ b/vscode/FSM_OOP/baseFSM/FSM_public.h
@@ -23,11 +23,12 @@ typedef struct FSMPublicFcns
{
void (*step)(FSM *pFSM); // 子类重新实现可以添加一些打印信息
void (*reset)(FSM *pFSM); // 子类重新实现可以添加一些打印信息
-
+ const char *(*curState2ASCII)(FSM *pFSM);
}FSMPublicFcns;
/* -------------------------------- 避免警告的函数定义 ------------------------------- */
#define Step(pFSM) _stepFSM((FSM *)pFSM) /**< 外界调用这个 */
+#define CurState2ASCII(pFSM) _curState2ASCII((FSM *)pFSM) /**< 外界调用这个 */
#define GetData(pFSM) _getData((FSM*)pFSM) /**< 外界调用这个 */
#define SetSignal(pFSM, signal) _setSignal((FSM*)pFSM, signal) /**< 外界调用这个 */
@@ -37,6 +38,7 @@ typedef struct FSMPublicFcns
void _stepFSM(FSM *pFSM);
+const char * _curState2ASCII(FSM *pFSM);
/* --------------------------------- 状态机信息获取 -------------------------------- */
int getFSMCurState(FSM *pFSM);
int getFSMNextState(FSM *pFSM);
diff --git a/vscode/FSM_OOP/childtest/ParentFSM.c b/vscode/FSM_OOP/childtest/ParentFSM.c
index 9e60e3c..614569f 100644
--- a/vscode/FSM_OOP/childtest/ParentFSM.c
+++ b/vscode/FSM_OOP/childtest/ParentFSM.c
@@ -110,7 +110,7 @@ static void setupHandler(FSMHandler* fcns){ // 必须重新实现
static void step(ParentFSM* pFSM){
printFSM(pFSM);
stepBaseFSM(BASE_FSM(pFSM));
- FSM_LOG("下次状态:%s", stateStr[getFSMNextState((FSM *)pFSM)]);
+ FSM_LOG("NextState:%s", stateStr[getFSMNextState((FSM *)pFSM)]);
}
diff --git a/vscode/FSM_OOP/childtest/ParentFSM_private.h b/vscode/FSM_OOP/childtest/ParentFSM_private.h
index 476902d..6deaf75 100644
--- a/vscode/FSM_OOP/childtest/ParentFSM_private.h
+++ b/vscode/FSM_OOP/childtest/ParentFSM_private.h
@@ -161,5 +161,5 @@ const static char *stateStr[] = {
static void printFSM(ParentFSM* pFSM){
FSM_LOG(" \tParent: ");
- FSM_LOG("当前状态:%s, 动作:", stateStr[getFSMCurState((FSM *)pFSM)]);
+ FSM_LOG("CurrentState:%s, Action", stateStr[getFSMCurState((FSM *)pFSM)]);
}
diff --git a/vscode/FSM_OOP/childtest/childFSM.c b/vscode/FSM_OOP/childtest/childFSM.c
index 42c4fd1..baaf47c 100644
--- a/vscode/FSM_OOP/childtest/childFSM.c
+++ b/vscode/FSM_OOP/childtest/childFSM.c
@@ -106,7 +106,7 @@ static void setupHandler(FSMHandler* fcns){ // 必须重新实现
static void step(ChildFSM* pFSM){
printFSM(pFSM);
stepBaseFSM(BASE_FSM(pFSM));
- FSM_LOG("下次状态:%s", stateStr[getFSMNextState((FSM *)pFSM)]);
+ FSM_LOG("NextState:%s", stateStr[getFSMNextState((FSM *)pFSM)]);
}
diff --git a/vscode/FSM_OOP/childtest/childFSM_private.h b/vscode/FSM_OOP/childtest/childFSM_private.h
index b0d46ec..4d43a79 100644
--- a/vscode/FSM_OOP/childtest/childFSM_private.h
+++ b/vscode/FSM_OOP/childtest/childFSM_private.h
@@ -133,5 +133,5 @@ const static char *stateStr[] = {
static void printFSM(ChildFSM* pFSM){
FSM_LOG(" \tChild: ");
- FSM_LOG("当前状态:%s, 动作:", stateStr[getFSMCurState((FSM *)pFSM)]);
+ FSM_LOG("CurrentState:%s, Action", stateStr[getFSMCurState((FSM *)pFSM)]);
}
diff --git a/vscode/FSM_OOP/childtest/main.c b/vscode/FSM_OOP/childtest/main.c
index 36f2615..51c45b3 100644
--- a/vscode/FSM_OOP/childtest/main.c
+++ b/vscode/FSM_OOP/childtest/main.c
@@ -21,7 +21,7 @@ int main(){
for (int k = 0; k < 15; k++)
{
- printf("第%d次: ",k+1);
+ printf("%d: ",k+1);
SetSignal(pFSM, i[k]);
SetSignal(cFSM, j[k]);
diff --git a/vscode/FSM_OOP/template/main.c b/vscode/FSM_OOP/template/main.c
index c81dbd5..3273699 100644
--- a/vscode/FSM_OOP/template/main.c
+++ b/vscode/FSM_OOP/template/main.c
@@ -28,8 +28,11 @@ int main(){
if(i == 7){
x = 0;
}
+
printf("%d, " ,i);
+
+ printf("\t\t %s", CurState2ASCII(pFSM));
Step(pFSM);
printf("\n");
diff --git a/vscode/FSM_OOP/template/templateFSM.c b/vscode/FSM_OOP/template/templateFSM.c
index f49d98d..cb214c2 100644
--- a/vscode/FSM_OOP/template/templateFSM.c
+++ b/vscode/FSM_OOP/template/templateFSM.c
@@ -17,6 +17,11 @@
#include "templateFSM.h"
#include "templateFSM_private.h"
+
+const char * curState2ASCII(TemplateFSM *pFSM){
+ return stateStr[getFSMCurState((FSM *)pFSM)];
+}
+
/* -------------------------------------------------------------------------- */
/* 纯虚函数,允许调用privateVars */
/* -------------------------------------------------------------------------- */
@@ -147,6 +152,7 @@ TemplateFSM *createTemplateFSM(){
// 重新实现的函数
pFSM->base.publicFcns.step = (Avoid_WARNING_Overrider_Fcns)step;
+ pFSM->base.publicFcns.curState2ASCII = (Avoid_WARNING_2ASCII_Fcns)curState2ASCII;
pFSM->base.pureVtbl.initData = (Avoid_WARNING_Overrider_Fcns)initData;
pFSM->base.pureVtbl.initDataLoader = (Avoid_WARNING_Overrider_Fcns)initDataLoader;
pFSM->base.pureVtbl.setupHandler = (Avoid_WARNING_void_fcns)setupHandler;
diff --git a/vscode/FSM_OOP/template/templateFSM.h b/vscode/FSM_OOP/template/templateFSM.h
index c244270..1de3e26 100644
--- a/vscode/FSM_OOP/template/templateFSM.h
+++ b/vscode/FSM_OOP/template/templateFSM.h
@@ -62,6 +62,7 @@ typedef struct TemplateFSMData
typedef struct TemplateFSM TemplateFSM;
TemplateFSM *createTemplateFSM();
+const char * curState2ASCII_TemplateFSM(TemplateFSM *pFSM);
#endif