を保持する構造体:私はSTATE1で午前FSMはKEY_UPプログラムを受信したときにステートマシン - 私は、ステートマシンを作成し、このようなインターフェースを使用したい場合は国、イベントとpFuncs
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"); }
をそのようにprint:
プログラマが配列サイズを変更する必要なく、状態および遷移情報をクラス内に格納する方法は問題です。私は2D配列を使用していつものように状態テーブルにすることができると考えていました。そして、必要に応じてベクトルタイプを使用してイベントや状態の追加を処理するだけです。ベクトルの問題は、多くの組み込みデバイスがメモリ割り当て呼び出しを使用できないことです。私の2番目のオプションは、ステートマシンでコンストラクタを呼び出し、テーブルに必要なサイズを渡しますが、新しい状態やイベントを追加する場合は、これらの値も変更する必要があります。
私は私の状態、イベント、関数ポインタを格納する必要がありますか?
以下のMatthieuの例に基づいて、私が望むすべてのことをする作業システムを完成させました!興味のある方は、完全なプログラム[こちら](http://pastebin.com/RtPne3dC)を見て、単に "g ++ file.cpp"を実行してください。 – uMinded