カスタマーサポートセンター

FAQ~よくある質問~ | FAQマスタ詳細表示

FAQ詳細情報

ID 10810221
FAQカテゴリ(大) RTOS & ミドルウェアなど
最終更新日 2009-04-10

質問内容

visualSTATEで設計されたアプリケーションにはOSが必要ないようですが、その仕組みはどのようになっているのでしょうか?

回答内容

visualSTATE はステートマシンモデルを数値テーブルベースのCコードに翻訳することにより、組み込みシステム用の独自の制御ロジックコードを生成します。この数値テーブルはvisualSTATEのAPI(実行エンジン)で読み込まれ、すべてのイベント、ガード式、変数、シグナルおよびアクションとして処理されます。このような変換がどうして可能になるのでしょうか?

これが可能であるのは、どのようなステートマシンでも数学的表式を用いたブール式で表現できるという理論に基づいています。

たとえば、以下のようなステートマシンを例にとります。

このステートマシンは、・#21516;時に・#23384;在する(コンカレントな)2つの事象から構成されているため、マルチタスクのOSなしに制御することがかなり困難なように思えます。しかしこれを式に表すと、次のようになります。

   E1 AND S1 -> S2 AND A1
   E2 AND S2 AND NOT S4 -> S3 AND A2 AND A3
   E3 AND S3 -> S1 AND A4 AND A5
   E4 AND S4 -> S5
   E5 AND S5 -> S4


もし現在のステートがS1でイベントE1が発生すれば、アクションA1が実行され、システムはステートS2に遷移します。ことばを替えれば、これは

   IF (E1 & S1) THEN (S2 & A1)

と表されます。

このようにして、もっと複雑な遷移も表現可能です。たとえば、現在のステートがS2でイベントE2が発生し、ステートS4がアクティブでなければ、アクションA2とA3が実行され、システムはS3に遷移します。これは、

   IF (E2 & S2 & !S4) THEN (S3 & A2 & A3)

と表すことができます。このように、ステートマシンをビジュアルな表現からロジカルなルールにすることが可能であることに基づいて、visualSTATEの変換書式は確立されています。この変換書式は、以下のとおりです。

  <イベント><現ステートベクタ>:<次ステートベクタ><アクションベクタ>
   例:E1 S1 !S4 : S2 A2 A3

ここで、":"(コロン)の左辺を「条件側」、右辺を「アクション側」といいます。上記のステートマシンに対してこの変換書式を適用し、最終的に生成されたANSI Cの構造体は、以下のようになります。

   VSDATA const VS =
   {
      {
         0X000, 0X000, 0X000, 0X001, 0X001
      },
      {
         0X002, 0X000, 0X000, 0X003, 0X011, 0X001, 0X000, 0X002,
         0X000, 0X021, 0X001, 0X001, 0X000, 0X003, 0X004, 0X021,
         0X002, 0X002, 0X004, 0X001, 0X001, 0X002, 0X001, 0X001,
         0X003, 0X004, 0X001, 0X001, 0X004, 0X003
      },
      {
         0X000, 0X004, 0X00F, 0X009, 0X016, 0X01A
      },
      {
         0X000, 0X001, 0X002, 0X003, 0X004, 0X005, 0X006
      }
   };

この定数データテーブルの内容はvisualSTATEのAPI(実行エンジン)で解釈され、実行可能なCコードとなります。

このテーブルはあらゆる遷移、実行されるべきアクションのリストなど、制御ロジックのすべてを表現しています。このような特許権つきのテクノロジにより、いかなるメモリ制限の厳しいマイクロコントローラに対しても非常にコンパクトなコード(上記のステートマシン本体の場合は、わずか48バイト)を生成し、OS なしにステートマシンを動作させることができるのです。

参考資料URL