小改结构,把template、按键和父子状态机的例子全写好
This commit is contained in:
parent
710d823b99
commit
cae4d5d6ce
|
@ -42,16 +42,18 @@ void childTest(){
|
|||
|
||||
for (int i = 0; i < 15; i++)
|
||||
{
|
||||
((ChildFSMData *)getData((FSM_Ptr)(cFSM)))->arrindex = i;
|
||||
((ParentFSMData *)getData((FSM_Ptr)(pFSM)))->arrindex = i;
|
||||
ParentFSM_Input(pFSM)->arrindex = i;
|
||||
SetPreloaderReady(pFSM);
|
||||
|
||||
ChildFSMData* data = getData((FSM_Ptr)(cFSM));
|
||||
ChildFSM_Input(cFSM)->arrindex = i;
|
||||
SetPreloaderReady(cFSM);
|
||||
|
||||
ChildFSMData* data = getData((FSM *)(cFSM));
|
||||
printf(" %d ", data->arrindex);
|
||||
|
||||
tic();
|
||||
vptrFSM((FSM_Ptr)pFSM)->step((FSM_Ptr)pFSM);
|
||||
_vptrFSM((FSM *)pFSM)->step((FSM *)pFSM);
|
||||
toc(index++);
|
||||
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
|
@ -65,24 +67,14 @@ KeyFSMData* data;
|
|||
|
||||
void keyFSMTest(){
|
||||
keyFSM = createKeyFSM();
|
||||
data = getData((FSM_Ptr)keyFSM);
|
||||
data = getData((FSM *)keyFSM);
|
||||
|
||||
printf("hello 28377\n");
|
||||
|
||||
while(1){
|
||||
|
||||
|
||||
|
||||
|
||||
// SetEvent(keyFSM);
|
||||
// Step(keyFSM);
|
||||
// setEvent((FSM_Ptr)keyFSM);
|
||||
// vptrFSM((FSM_Ptr)keyFSM)->step((FSM_Ptr)keyFSM);
|
||||
|
||||
KeyIn *in = preloadIn((FSM_Ptr)keyFSM);
|
||||
*in = !GPIO_ReadPin(INPUT_GPIO);
|
||||
preloaderReady((FSM_Ptr)keyFSM);
|
||||
|
||||
*KeyFSM_Input(keyFSM) = !GPIO_ReadPin(INPUT_GPIO);
|
||||
SetPreloaderReady(keyFSM);
|
||||
|
||||
tic();
|
||||
Step(keyFSM);
|
||||
|
@ -133,8 +125,8 @@ void main(void)
|
|||
GPIO_SetupPinOptions(INPUT_GPIO, GPIO_INPUT, GPIO_PULLUP);
|
||||
|
||||
|
||||
// childTest();
|
||||
keyFSMTest();
|
||||
childTest();
|
||||
// keyFSMTest();
|
||||
// funptrTest();
|
||||
}
|
||||
|
||||
|
|
|
@ -5,13 +5,18 @@ project(controller)
|
|||
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)
|
||||
aux_source_directory(${PROJECT_SOURCE_DIR}/FSM_OOP/keytest SRC_FSM_USR)
|
||||
else()
|
||||
elseif(DEFINED child_parent)
|
||||
include_directories(${PROJECT_SOURCE_DIR}/FSM_OOP/childtest)
|
||||
aux_source_directory(${PROJECT_SOURCE_DIR}/FSM_OOP/childtest SRC_FSM_USR)
|
||||
else()
|
||||
include_directories(${PROJECT_SOURCE_DIR}/FSM_OOP/template)
|
||||
aux_source_directory(${PROJECT_SOURCE_DIR}/FSM_OOP/template SRC_FSM_USR)
|
||||
endif()
|
||||
|
||||
add_executable(test ${SRC_FSM_OOP} ${SRC_FSM_USR})
|
|
@ -100,8 +100,6 @@ FSM* newBaseFSM(int numState, int numEvent, int defaultState){
|
|||
pFSM->privateVars.preloader.isReady = 0;
|
||||
|
||||
pFSM->privateVars.fcns.duringActionTable = calloc(numState, sizeof(StateFuncPtr));
|
||||
|
||||
|
||||
pFSM->privateVars.fcns.enterActionTable = calloc(numState, sizeof(StateFuncPtr));
|
||||
pFSM->privateVars.fcns.exitActionTable = calloc(numState, sizeof(StateFuncPtr));
|
||||
|
||||
|
@ -162,15 +160,15 @@ const void *getData(FSM* pFSM){
|
|||
return (const void *)pFSM->data;
|
||||
}
|
||||
|
||||
void *preloadIn(FSM *pFSM){
|
||||
void *_preloadIn(FSM *pFSM){
|
||||
return pFSM->privateVars.preloader.in;
|
||||
}
|
||||
|
||||
void preloaderReady(FSM *pFSM){
|
||||
void _setPreloaderReady(FSM *pFSM){
|
||||
pFSM->privateVars.preloader.isReady = 1;
|
||||
}
|
||||
|
||||
|
||||
FSMVtbl *vptrFSM(FSM* pFSM){
|
||||
FSMVtbl *_vptrFSM(FSM* pFSM){
|
||||
return &pFSM->vtbl;
|
||||
}
|
||||
|
|
|
@ -5,10 +5,10 @@
|
|||
#define BASE_PTR (FSM *)
|
||||
|
||||
typedef struct _FSM FSM;
|
||||
typedef FSM * FSM_Ptr;
|
||||
|
||||
// #define SetEvent(FSM) setEvent((FSM_Ptr)FSM)
|
||||
#define Step(FSM) vptrFSM((FSM_Ptr)FSM)->step((FSM_Ptr)FSM)
|
||||
#define Step(pFSM) _vptrFSM((FSM *)pFSM)->step((FSM *)pFSM)
|
||||
#define SetPreloaderReady(pFSM) _setPreloaderReady((FSM *)pFSM);
|
||||
|
||||
|
||||
typedef struct _FSMHandler FSMHandler;
|
||||
// 这几个函数可认为是虚函数, 构造函数里不会初始化FSMVtbl, 必须由子类重新实现
|
||||
|
@ -25,15 +25,14 @@ typedef struct _FSMVtbl {
|
|||
|
||||
int getFSMCurState(FSM *pFSM);
|
||||
int getFSMCurEvent(FSM *pFSM);
|
||||
// void setEvent(FSM* pFSM);
|
||||
void setChildNum(FSM *pFSM, int num);
|
||||
void registerChildFSM(FSM *parent, FSM *child, int index);
|
||||
|
||||
const void *getData(FSM* pFSM);
|
||||
void *preloadIn(FSM *pFSM);
|
||||
void preloaderReady(FSM *pFSM);
|
||||
void *_preloadIn(FSM *pFSM);
|
||||
void _setPreloaderReady(FSM *pFSM);
|
||||
|
||||
FSMVtbl *vptrFSM(FSM* pFSM);
|
||||
FSMVtbl *_vptrFSM(FSM* pFSM);
|
||||
|
||||
|
||||
#endif
|
|
@ -5,7 +5,6 @@
|
|||
#include "FSM_protected.h"
|
||||
|
||||
#define DEFAULT_STATE Idle
|
||||
#define NAME Parent
|
||||
|
||||
typedef struct _ParentFSM
|
||||
{
|
||||
|
@ -163,7 +162,7 @@ static Event selectEvent(ParentFSMData *data){
|
|||
用户自定义事件选择逻辑————————end
|
||||
*/
|
||||
|
||||
static void FSM_LOGSM(ParentFSM* pFSM){
|
||||
static void printFSM(ParentFSM* pFSM){
|
||||
FSM_LOG("\tParentFSM: ");
|
||||
|
||||
FSM_LOG("当前状态:%s, 当前事件:%s, 动作:", stateStr[pFSM->base.privateVars.curState], eventStr[pFSM->base.privateVars.curEvent]);
|
||||
|
@ -171,7 +170,7 @@ static void FSM_LOGSM(ParentFSM* pFSM){
|
|||
|
||||
|
||||
static void step(ParentFSM* pFSM){
|
||||
FSM_LOGSM(pFSM);
|
||||
printFSM(pFSM);
|
||||
stepBaseFSM(BASE_FSM(pFSM));
|
||||
}
|
||||
|
||||
|
@ -187,6 +186,11 @@ static void initData(ParentFSM *pFSM){
|
|||
pFSM->base.data = data;
|
||||
}
|
||||
|
||||
static void initDataLoader(ParentFSM *pFSM){ // 必须重新实现
|
||||
pFSM->base.privateVars.preloader.in = malloc(sizeof(ParentFSMData));
|
||||
pFSM->base.privateVars.preloader.preloadSize = sizeof(ParentFSMData);
|
||||
}
|
||||
|
||||
|
||||
ParentFSM *createParentFSM(){
|
||||
|
||||
|
@ -197,8 +201,9 @@ ParentFSM *createParentFSM(){
|
|||
pFSM->base.vtbl.selectEvent = selectEvent;
|
||||
pFSM->base.vtbl.initData = initData;
|
||||
pFSM->base.vtbl.setupHandler = setupHandler;
|
||||
pFSM->base.vtbl.initDataLoader = initDataLoader;
|
||||
|
||||
constructFSM((FSM_Ptr)pFSM);
|
||||
constructFSM((FSM *)pFSM);
|
||||
return pFSM;
|
||||
}
|
||||
|
||||
|
|
|
@ -42,6 +42,11 @@ static void initData(ChildFSM *pFSM){ // 必须重新实现
|
|||
pFSM->base.data = data;
|
||||
}
|
||||
|
||||
static void initDataLoader(ChildFSM *pFSM){ // 必须重新实现
|
||||
pFSM->base.privateVars.preloader.in = malloc(sizeof(ChildFSMData));
|
||||
pFSM->base.privateVars.preloader.preloadSize = sizeof(ChildFSMData);
|
||||
}
|
||||
|
||||
static void setupHandler(FSMHandler* fcns){ // 必须重新实现
|
||||
addStateActionFcn(during, E);
|
||||
addStateActionFcn(during, D);
|
||||
|
@ -69,8 +74,9 @@ ChildFSM *createChildFSM(){
|
|||
pFSM->base.vtbl.selectEvent = selectEvent;
|
||||
pFSM->base.vtbl.initData = initData;
|
||||
pFSM->base.vtbl.setupHandler = setupHandler;
|
||||
pFSM->base.vtbl.initDataLoader = initDataLoader;
|
||||
|
||||
constructFSM((FSM_Ptr)pFSM);
|
||||
constructFSM((FSM *)pFSM);
|
||||
|
||||
return pFSM;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
#ifndef __CHILD_FSM_H_
|
||||
#define __CHILD_FSM_H_
|
||||
|
||||
#define ChildFSM_Input(pFSM) ((ChildFSMData *)_preloadIn((FSM *)pFSM))
|
||||
|
||||
typedef struct _childFSMData
|
||||
{
|
||||
int arrindex;
|
||||
|
|
|
@ -114,7 +114,7 @@ const static char *eventStr[] = {
|
|||
};
|
||||
static void printFSM(ChildFSM* pFSM){
|
||||
FSM_LOG(" \t\tChildFSM: ");
|
||||
FSM_LOG("当前状态:%s, 当前事件:%s, 动作:", stateStr[getFSMCurState((FSM_Ptr)pFSM)], eventStr[getFSMCurEvent((FSM_Ptr)pFSM)]);
|
||||
FSM_LOG("当前状态:%s, 当前事件:%s, 动作:", stateStr[getFSMCurState((FSM *)pFSM)], eventStr[getFSMCurEvent((FSM *)pFSM)]);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -17,14 +17,17 @@ int main(){
|
|||
|
||||
for (int i = 0; i < 15; i++)
|
||||
{
|
||||
((ChildFSMData *)getData((FSM_Ptr)(cFSM)))->arrindex = i;
|
||||
((ParentFSMData *)getData((FSM_Ptr)(pFSM)))->arrindex = i;
|
||||
ParentFSM_Input(pFSM)->arrindex = i;
|
||||
SetPreloaderReady(pFSM);
|
||||
|
||||
ChildFSMData* data = getData((FSM_Ptr)(cFSM));
|
||||
ChildFSM_Input(cFSM)->arrindex = i;
|
||||
SetPreloaderReady(cFSM);
|
||||
|
||||
ChildFSMData* data = getData((FSM *)(cFSM));
|
||||
printf(" %d ", data->arrindex);
|
||||
|
||||
|
||||
vptrFSM((FSM_Ptr)pFSM)->step((FSM_Ptr)pFSM);
|
||||
_vptrFSM((FSM *)pFSM)->step((FSM *)pFSM);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
#ifndef __PARENT_FSM_H_
|
||||
#define __PARENT_FSM_H_
|
||||
|
||||
#define ParentFSM_Input(pFSM) ((ParentFSMData *)_preloadIn((FSM *)pFSM))
|
||||
|
||||
typedef struct _parentFSMData
|
||||
{
|
||||
int arrindex;
|
||||
|
|
|
@ -27,7 +27,7 @@ static Event selectEvent(KeyFSMData *data){ // 必须重新实现
|
|||
|
||||
static void step(KeyFSM* pFSM){
|
||||
printFSM(pFSM);
|
||||
stepBaseFSM((FSM_Ptr)pFSM);
|
||||
stepBaseFSM((FSM *)pFSM);
|
||||
|
||||
KeyFSMData * data = pFSM->base.data;
|
||||
|
||||
|
@ -98,7 +98,7 @@ KeyFSM *createKeyFSM(){
|
|||
pFSM->base.vtbl.initData = (Avoid_WARNING_Overrider_Fcns)initData;
|
||||
pFSM->base.vtbl.initDataLoader = (Avoid_WARNING_Overrider_Fcns)initDataLoader;
|
||||
|
||||
constructFSM((FSM_Ptr)pFSM);
|
||||
constructFSM((FSM *)pFSM);
|
||||
|
||||
return pFSM;
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#define __KEY_FSM_H_
|
||||
|
||||
|
||||
|
||||
#define KeyFSM_Input(pFSM) (KeyIn *)_preloadIn((FSM *)pFSM)
|
||||
|
||||
typedef enum _keyIn{
|
||||
Up,
|
||||
|
|
|
@ -47,7 +47,6 @@ static void actionFcn(enter, Waiting)(KeyFSMData* data){
|
|||
|
||||
static void actionFcn(during, DownDebouncing)(KeyFSMData* data)
|
||||
{
|
||||
|
||||
data->countDelay++;
|
||||
FSM_LOG(" during开启消抖 ");
|
||||
}
|
||||
|
@ -267,7 +266,7 @@ const static char *eventStr[] = {
|
|||
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_Ptr)pFSM)], eventStr[getFSMCurEvent((FSM_Ptr)pFSM)]);
|
||||
FSM_LOG("%d, 当前状态:%s, \t当前事件:%s \t转移:", data->countDelay, stateStr[getFSMCurState((FSM *)pFSM)], eventStr[getFSMCurEvent((FSM *)pFSM)]);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#include <stdio.h>
|
||||
|
||||
#include "keyFSM.h"
|
||||
#include "templateFSM.h"
|
||||
#include "FSM_public.h"
|
||||
|
||||
#define NUM 60
|
||||
|
@ -19,13 +19,6 @@ KeyIn testin[NUM] = {
|
|||
pDown,pDown,pDown,pDown
|
||||
};
|
||||
|
||||
typedef void (*fcn)();
|
||||
|
||||
void printtest(){
|
||||
printf("fcn\n");
|
||||
}
|
||||
|
||||
|
||||
int main(){
|
||||
|
||||
KeyFSM* keyFSM = createKeyFSM();
|
||||
|
@ -33,25 +26,18 @@ int main(){
|
|||
for (int i = 0; i < NUM; i++)
|
||||
{
|
||||
printf("第%d次: ",i+1);
|
||||
const KeyFSMData* data = getData((FSM_Ptr)keyFSM);
|
||||
|
||||
*(KeyIn *)preloadIn((FSM_Ptr)keyFSM) = testin[i];
|
||||
preloaderReady((FSM_Ptr)keyFSM);
|
||||
const KeyFSMData* data = getData((FSM *)keyFSM);
|
||||
|
||||
*KeyFSM_Input(keyFSM) = testin[i];
|
||||
SetPreloaderReady(keyFSM);
|
||||
Step(keyFSM);
|
||||
|
||||
if(data->out){
|
||||
printf("\t\t\t\t%d", data->out);
|
||||
}
|
||||
|
||||
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
|
||||
printf("hello world, 你好世界\n");
|
||||
|
||||
fcn fcnptr = printtest;
|
||||
(fcnptr == NULL) ? : fcnptr();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
#include <stdio.h>
|
||||
|
||||
#include "templateFSM.h"
|
||||
#include "FSM_public.h"
|
||||
|
||||
TemplateFSM *pFSM;
|
||||
|
||||
int main(){
|
||||
|
||||
pFSM = createTemplateFSM();
|
||||
|
||||
|
||||
for (int i = 0; i < 15; i++)
|
||||
{
|
||||
TemplateFSM_Input(pFSM)->arrindex = i;
|
||||
SetPreloaderReady(pFSM);
|
||||
|
||||
printf("%d," ,i);
|
||||
|
||||
Step(pFSM);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -24,7 +24,7 @@ static Event ceventArr[20] = {
|
|||
};
|
||||
|
||||
static Event selectEvent(TemplateFSMData *data){ // 必须重新实现
|
||||
return ceventArr[data->arrindex];
|
||||
return ceventArr[data->in.arrindex];
|
||||
}
|
||||
|
||||
static void step(TemplateFSM* pFSM){
|
||||
|
@ -34,25 +34,41 @@ static void step(TemplateFSM* pFSM){
|
|||
|
||||
static void initData(TemplateFSM *pFSM){ // 必须重新实现
|
||||
TemplateFSMData *data = (TemplateFSMData *)malloc(sizeof(TemplateFSMData));
|
||||
data->arrindex = 0;
|
||||
TemplateFSMData tempData = {
|
||||
.in = {
|
||||
.arrindex = 0,
|
||||
.x = 0,
|
||||
},
|
||||
.inner1 = 0,
|
||||
.y1 = 0,
|
||||
};
|
||||
*data = tempData;
|
||||
|
||||
pFSM->base.data = data;
|
||||
}
|
||||
|
||||
static void initDataLoader(TemplateFSM *pFSM){ // 必须重新实现
|
||||
pFSM->base.privateVars.preloader.in = malloc(sizeof(TemplateFSMIn));
|
||||
pFSM->base.privateVars.preloader.preloadSize = sizeof(TemplateFSMIn);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void setupHandler(FSMHandler* fcns){ // 必须重新实现
|
||||
fcns->duringActionTable[E] = (Avoid_WARNING_State_Fcns)actionFcn(during, E);
|
||||
fcns->duringActionTable[D] = (Avoid_WARNING_State_Fcns)actionFcn(during, D);
|
||||
|
||||
fcns->enterActionTable[D] = (Avoid_WARNING_State_Fcns)actionFcn(enter, D);
|
||||
fcns->enterActionTable[E] = (Avoid_WARNING_State_Fcns)actionFcn(enter, E);
|
||||
addStateActionFcn(during, E);
|
||||
addStateActionFcn(during, D);
|
||||
addStateActionFcn(enter, E);
|
||||
addStateActionFcn(enter, D);
|
||||
addStateActionFcn(exit, E);
|
||||
addStateActionFcn(exit, D);
|
||||
|
||||
fcns->exitActionTable[D] = (Avoid_WARNING_State_Fcns)D_exitAction;
|
||||
fcns->exitActionTable[E] = (Avoid_WARNING_State_Fcns)E_exitAction;
|
||||
addTransitionHandler(Idle, Idle2D);
|
||||
addTransitionHandler(Idle, Idle2E);
|
||||
addTransitionHandler(D, D2E);
|
||||
addTransitionHandler(E, E2D);
|
||||
|
||||
fcns->transitionTable[index(Idle, Idle2D)] = (Avoid_WARNING_Transition_Handler)transitionHandler(Idle2D);
|
||||
fcns->transitionTable[index(Idle, Idle2E)] = (Avoid_WARNING_Transition_Handler)transitionHandler(Idle2E);
|
||||
fcns->transitionTable[index(D, D2E)] = (Avoid_WARNING_Transition_Handler)transitionHandler(D2E);
|
||||
fcns->transitionTable[index(E, E2D)] = (Avoid_WARNING_Transition_Handler)transitionHandler(E2D);
|
||||
addDelayHandler(Idle2D);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -60,16 +76,17 @@ static void setupHandler(FSMHandler* fcns){ // 必须重新实现
|
|||
*/
|
||||
|
||||
TemplateFSM *createTemplateFSM(){
|
||||
|
||||
TemplateFSM *pFSM;
|
||||
pFSM = (TemplateFSM *)newBaseFSM(Count_State, Count_Event, DEFAULT_STATE);
|
||||
|
||||
pFSM->base.vtbl.step = (Avoid_WARNING_State_Fcns)step;
|
||||
pFSM->base.vtbl.selectEvent = (Avoid_WARNING_int_data)selectEvent;
|
||||
pFSM->base.vtbl.initData = (Avoid_WARNING_State_Fcns)initData;
|
||||
pFSM->base.vtbl.step = (Avoid_WARNING_Overrider_Fcns)step;
|
||||
pFSM->base.vtbl.initData = (Avoid_WARNING_Overrider_Fcns)initData;
|
||||
pFSM->base.vtbl.initDataLoader = (Avoid_WARNING_Overrider_Fcns)initDataLoader;
|
||||
|
||||
pFSM->base.vtbl.selectEvent = (Avoid_WARNING_SelectEvent)selectEvent;
|
||||
pFSM->base.vtbl.setupHandler = (Avoid_WARNING_void_fcns)setupHandler;
|
||||
|
||||
constructFSM((FSM_Ptr)pFSM);
|
||||
constructFSM((FSM *)pFSM);
|
||||
|
||||
return pFSM;
|
||||
}
|
||||
|
|
|
@ -1,13 +1,24 @@
|
|||
#ifndef __TEMPLATE_FSM_H_
|
||||
#define __TEMPLATE_FSM_H_
|
||||
|
||||
typedef struct _templateFSMData
|
||||
|
||||
#define TemplateFSM_Input(pFSM) ((TemplateFSMIn *)_preloadIn((FSM *)pFSM))
|
||||
|
||||
|
||||
typedef struct _templateFSMIn
|
||||
{
|
||||
int arrindex;
|
||||
int x;
|
||||
}TemplateFSMIn;
|
||||
|
||||
typedef struct _templateFSMData
|
||||
{
|
||||
TemplateFSMIn in;
|
||||
int y1;
|
||||
int inner1;
|
||||
}TemplateFSMData;
|
||||
|
||||
typedef struct _TemplateFSM TemplateFSM;
|
||||
|
||||
TemplateFSM *createTemplateFSM();
|
||||
|
||||
|
||||
|
|
|
@ -31,28 +31,28 @@ typedef enum _State
|
|||
|
||||
static void actionFcn(enter, D)()
|
||||
{
|
||||
printf(" enterD ");
|
||||
FSM_LOG(" enterD ");
|
||||
}
|
||||
static void actionFcn(during, D)()
|
||||
{
|
||||
printf(" duringD ");
|
||||
FSM_LOG(" duringD ");
|
||||
}
|
||||
static void actionFcn(exit, D)()
|
||||
{
|
||||
printf(" exitD ");
|
||||
FSM_LOG(" exitD ");
|
||||
}
|
||||
|
||||
static void actionFcn(enter, E)()
|
||||
{
|
||||
printf(" enterE ");
|
||||
FSM_LOG(" enterE ");
|
||||
}
|
||||
static void actionFcn(during, E)()
|
||||
{
|
||||
printf(" duringE ");
|
||||
FSM_LOG(" duringE ");
|
||||
}
|
||||
static void actionFcn(exit, E)()
|
||||
{
|
||||
printf(" exitE ");
|
||||
FSM_LOG(" exitE ");
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -72,25 +72,29 @@ typedef enum _Event{
|
|||
|
||||
static State transitionHandler(Idle2D)()
|
||||
{
|
||||
printf(" Idle2D ");
|
||||
FSM_LOG(" Idle2D ");
|
||||
return D;
|
||||
}
|
||||
|
||||
static void delayHanlder(Idle2D)(TemplateFSMData *data){
|
||||
FSM_LOG(" DelayIdle2D");
|
||||
}
|
||||
|
||||
static State transitionHandler(Idle2E)()
|
||||
{
|
||||
printf(" Idle2E ");
|
||||
FSM_LOG(" Idle2E ");
|
||||
return E;
|
||||
}
|
||||
|
||||
static State transitionHandler(D2E)()
|
||||
{
|
||||
printf(" D2E ");
|
||||
FSM_LOG(" D2E ");
|
||||
return E;
|
||||
}
|
||||
|
||||
static State transitionHandler(E2D)()
|
||||
{
|
||||
printf(" E2D ");
|
||||
FSM_LOG(" E2D ");
|
||||
return D;
|
||||
}
|
||||
|
||||
|
@ -113,8 +117,8 @@ const static char *eventStr[] = {
|
|||
"E2D",
|
||||
};
|
||||
static void printFSM(TemplateFSM* pFSM){
|
||||
printf(" \t\tTemplateFSM: ");
|
||||
printf("当前状态:%s, 当前事件:%s, 动作:", stateStr[getFSMCurState((FSM_Ptr)pFSM)], eventStr[getFSMCurEvent((FSM_Ptr)pFSM)]);
|
||||
FSM_LOG(" \t\tTemplateFSM: ");
|
||||
FSM_LOG("上次事件:%s, 当前状态:%s, 动作:", eventStr[getFSMCurEvent((FSM *)pFSM)], stateStr[getFSMCurState((FSM *)pFSM)]);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue