1

私はFSMを使用していくつかのメニューを作成しましたが、非常に不格好なインターフェイスを使用しています。再配置を容易にするためにプログラミングから1年の長い休憩を取り、今夜、古いFSMコードを書き直しました。

ここで見ることができます

私のコードの問題は、実装を変更するたびに、StateMachineクラスとイベントプロセッサを大幅に作り直す必要があることです。これは組み込みデバイス上にあるため、BOOST :: FSMを使用できないため、メニューやプログラミングの真数などを処理するのに十分な堅牢性を備えた独自のクラスを作成したいと思います(たとえば、PICのICSPは単純なFSMです)。

ステートマシンをもっと使いやすくすることをどのように勧めますか?

4

1 に答える 1

1

独自のクラスを作成している場合は、汎用FSMの実装を検討してから、状態とイベントを入力します。

基本的には、メソッドとして次のようなものを使用した単純なインターフェイスになります。

create();
addState(someState, stateFunction);
addEdge(someStateOrig, someStateDest, event);
processEvent(event);
start(startFromState);

それはそれをカバーする必要があります。次に、FSMを作成するときに、状態、状態に到達したときに実行する関数、およびFSMをある状態から別の状態に移動させるイベントをフィードします。

次に、開始状態となるある状態でFSMを開始し、イベントをフィードします。

イベント、関数、または状態を変更する必要がある場合(FSMの実装は同じままです)、それを使用するコードを変更します。

それは多かれ少なかれBoost.FSMがあなたに与えるものです、しかしあなたはそれを使うことができないと言いました-それであなた自身でそれをしてください:-)

于 2011-07-18T05:04:06.947 に答える