如果我制作了一个状态机并想要使用这样的接口:
那么当我处于state1状态时,FSM接收到Key_UP时,程序将打印:
问题是如何在类内部存储状态和转换信息,而不需要程序员改变数组大小。我考虑使用2D数组并将其制作成状态表,然后为了使其更加便携,我将使用向量类型来根据需要调整大小以处理事件和状态的添加。向量的问题在于许多嵌入式设备无法使用内存分配调用。我的第二个选择是调用一个构造函数,并将状态机的大小传递给它,但是如果我添加任何新的状态或事件,则也需要更改这些值...那么我应该如何存储我的状态、事件和函数指针呢?
AddState ( state1, state2, Key_UP );
AddEvent ( Key_UP );
AddEventFunction ( Key_UP, &UP_Function);
AddStateFunction ( state1, &State1_In_Function, &State1_Out_Function);
AddStateFunction ( state2, &State2_In_Function, &State2_Out_Function);
State1_In_Function ( void ) { printf ( "In #1 \n" ); }
State1_Out_Function ( void ) { printf ( "Out #1 \n" ); }
State2_In_Function ( void ) { printf ( "In #2 \n" ); }
State2_Out_Function ( void ) { printf ( "Out #2 \n" ); }
UP_Function ( void ) { printf ( "Goin UP \n" ); }
那么当我处于state1状态时,FSM接收到Key_UP时,程序将打印:
Out #1
Goin UP
In #2
问题是如何在类内部存储状态和转换信息,而不需要程序员改变数组大小。我考虑使用2D数组并将其制作成状态表,然后为了使其更加便携,我将使用向量类型来根据需要调整大小以处理事件和状态的添加。向量的问题在于许多嵌入式设备无法使用内存分配调用。我的第二个选择是调用一个构造函数,并将状态机的大小传递给它,但是如果我添加任何新的状态或事件,则也需要更改这些值...那么我应该如何存储我的状态、事件和函数指针呢?