ステートマシンを作成し、次のようなインターフェイスを使用したい場合:
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配列を使用して、通常のように状態テーブルにし、移植性を高めるために、必要に応じてベクトル型を使用してサイズを変更することで、イベントと状態の追加を処理できると考えていました。ベクトルの問題は、多くの組み込みデバイスがメモリ割り当て呼び出しを使用できないことです。2番目のオプションは、ステートマシンでコンストラクターを呼び出し、テーブルに必要なサイズを渡すことですが、新しい状態やイベントを追加する場合は、これらの値も変更する必要があります...
では、状態、イベント、関数ポインタをどのように保存すればよいのでしょうか。