用一个类定义事件和状态 文件:GlobalAutoDcl.h Const int NbMaxAction =10; Const int NbMaxState =5; Const int NbMaxEvent =6; Class GlobalAutoDcl{ public: typedef enum { event0 = 0; event1 =1; ....... } typedef enum { state0 = 0; state1 =1; ....... } } 用一个抽象类定义一些数组,Action等: 文件: GlobalAuto.h class GlobalResetAuto{ public: protected: //定义action的函数指针类型 typedef GlobalAutoDcl::StateForGlobalReset_t (GlobalAuto::*fPtr) (Signal *); //定义一个Action的表 static fPtr ActionTable[NbMaxAction]; // 定义一个state/event的二维数组 static unsigned char Automaton[NbMaxState ][NbMaxEvent]; //二维数组的值就是Action,对应的state,event // 定义虚函数,也就是Action函数 // 注意函数名字定义,由state和event组成,表示这个action是在此state下收到此event virtual GlobalAutoDcl::State_t state1_event2(Signal *msg) =0; virtual GlobalAutoDcl::State_t state3_event5(Signal *msg) =0; // 此类中通常还包括如下方法定义 // 1. 返回当前state // 2. 把当前state和event转换成字符串 // 3. ActionTable的初始化调用函数 // 4. 初始化Action数组的函数(也可以不放这里) } 在globalauto.h文件中方法的具体实现 文件: globalauto.cpp // 上面的state/event数组可以放在这里初始化 // Action也可以放在这里初始化 // 通常还会增加debug功能,记录过去发生的event // 一个接收input signal的函数, 传进来的event应该包含event, 而state是本地有的 // 然后调用action中的函数指针,更改新state
C++ 有限状态机
最新推荐文章于 2024-05-19 22:52:45 发布