ステートチャートとステートマシン

ステートマシンはオートマトン理論に基づいた数理モデルで、離散システムを記述するために広く使用されます。ある時点において、システムはいくつかの実行可能なステート(状態)のうちの1つにあり、環境からの入力によって、ステートが変わります。さらに、ステートの変更が生じるとともに、アクション(動作)が環境に応じて実行されます。

ステートマシンの定義

ステートマシンは、一般的に、以下のエレメントにより定義されます:

  • ステート - システムの現在の状態に関する情報を具体化
  • イベント - ステートマシンへの入力メッセージ
  • トランジション - イベントによってトリガされる、あるステートから別のステートへの遷移
  • アクション - 定められたタイミングでステートマシンによって実行される動作
  • トランジションに記述されるガード条件(評価式)の基本セット

ステートマシンには、多くの異なる表記法や記号があります。組込みシステムのデザインの中で最も広く使用されるものはおそらくムーア型マシンとミーリ型マシンです。これらの表記法の主な違いは、アクションがいつ生じるかです。ムーア型マシンでは、アクションはステートの入り口で実行されます。ミーリ型マシンでは、ステート間のトランジション中のみでアクションを実行することができます。

1987年には、David Harelが、1つのステートマシンで並行実行可能な階層的ステートマシンのコンセプトを導入しました。 

statechart
クリックすると拡大します

UMLによって定義されたステートマシンの表記法は、大部分はHarelの表記法に基づき、ミーリとムーアの表記法を組み入れています。

ステートマシンとオートマトン理論の表記法は、 National Institue of Standards and Technology (全米標準/技術機関) や Wikipedia で参照できます。

visualSTATEでのステートマシン

visualSTATEでは、ステートマシンあるいは並列マシンのシステムはUML表記法を使用して設計されています。visualSTATEの設計思想は以下のように表現することができます:

  • デバイスドライバ入力や割込などをステートマシンのイベントとして環境領域にマッピング
  • UMLダイアグラムを使用し、ステート、イベント、トランジション、アクションで離散システムロジックを把握
  • 環境領域で互いに作用し合う機能やデバイスドライバをアクションにマッピング

環境領域からコアシステムロジックを分けることによって、多くの利点が生じます:

  • 非常にコンパクトなステートマシンロジックのCコードを生成することが可能 - visualSTATEはコード効率を念頭におき、開発されました
  • 合理的な構造であるため、小さな変更を加えれば、既存のハードウェアボードサポートをマイナーチェンジで再使用することが可能
  • 設計モデルはシステムの離散的な動作のみを扱うため非常にわかりやすい
  • 形式検証はモデル上で行なうことができ、開発初期フェーズで誤動作を発見可能

ランタイム動作環境

  • 生成コードをコンパイルするANSI C/C++コンパイラ:このコードはOSに依存せず、任意の8/16/32ビットのターゲット上で実行可能で、これには、OSの有無に関わらず、すべてのPCやワークステーションも含みます。
  • OSサービス上の必要条件は不要:ハードウェアに近いレベルで動作する場合、設計モデルがステートマシン中でコンカレンシを表現することができるため、visualSTATEはタスクスイッチャーが不要です。
  • OSが存在する場合、非常に簡単にランタイム環境へvisualSTATEモデルを統合することが可能です。
  • ROM容量はステートマシン表現のため固定的なオーバヘッド1~2kBに加え、各トランジション毎に数バイト程度です。これはロジックを手書きでコーディングすることに比べて有利です。(上記は代表的な値で、固定オーバヘッドは実ターゲットやコンパイラに依存し、増減します。)

figure1