Main Content

Stateflow ブロックからの C または C++ コードの生成

Stateflow® チャートを含む Simulink® モデルから C または C++ のコードを生成するには、Simulink Coder™ を使用しなければなりません。Simulink Coder に加え、Embedded Coder® を使用して生成コードをさらに強化することができます。Embedded Coder の強化機能によって、さらに読みやすくコンパクトで高速に実行できるコードにすることができます。

ターゲットに対するコードを生成する場合、Stateflow パーサーは各 Stateflow マシンにあるグラフィカル オブジェクトと非グラフィカル オブジェクト、およびデータを、サポートされるチャート表記法とアクション言語の構文に照らして評価します。詳細については、シミュレーション時の一般的なモデリング エラーの検出を参照してください。

Simulink Coder を使用したコードの生成

Simulink Coder を使用すると、Stateflow チャートを含むモデルから C および C++ のコードを生成することができます。その後、生成されたコードを次のようなリアルタイムや非リアルタイムのアプリケーションに使用できます。

  • シミュレーションの高速化

  • ラピッド プロトタイピング

  • ハードウェアインザループ (HIL) テスト

Simulink Coder を使用すると、クラシック アクセラレータ モードとラピッド アクセラレータ モードにもアクセスできます。アクセラレータ モードは、後で実行に使用されるターゲット コードを生成することによって機能します。これらのモードの詳細については、アクセラレータ モードの動作 (Simulink)を参照してください。

HIL テストでは、コントローラー設計をテストして物理システム (プラント) のモデルが有効かどうかを判定することができます。HIL テストの詳細については、ハードウェアインザループ シミュレーションの基礎 (Simscape)を参照してください。

詳細については、Simulink Coder を使用したコード生成 (Simulink Coder)を参照してください。

Embedded Coder を使用したコードの生成

Embedded Coder を追加すると、さらにコンパクトで読み取りやすく、高速に実行できる C や C++ のコードを生成できます。また、Embedded Coder は、生成された関数、ファイル、データの制御を可能にすることにより、Simulink Coder の機能を拡張します。さらに、Embedded Coder を使用すると、レガシ コードやデータ型、キャリブレーション パラメーターとの統合が簡単になります。Embedded Coder は以下のソフトウェア標準に対応しています。

  • AUTOSAR

  • MISRA C

  • ASAP2

Embedded Coder は、特定のハードウェア向けの高度な最適化とデバイス ドライバーを備えたサポート パッケージも提供します。

詳細については、Embedded Coder を使用したコード生成 (Embedded Coder)を参照してください。

Stateflow オブジェクトに対して生成されたコードを最適化するための設計のヒント

グラフィカル関数のインライン オプションを明示する

Stateflow チャートでグラフィカル関数を使用する場合は、[関数インライン オプション] プロパティとして [インライン] または [関数] を選択します。そうしないと、グラフィカル関数に対して生成されたコードが希望どおりに表示されない場合があります。詳細については、グラフィカル関数のプロパティの指定を参照してください。

Stateflow チャートで複数のエッジトリガー イベントを使用しない

複数のトリガーを使用する場合は、立ち上がりエッジまたは立ち下がりエッジの検出を処理する複数のコード ステートメントを生成します。複数のトリガーが必要な場合は、代わりに関数呼び出しイベントを使用します。詳細については、入力イベントの送信による Stateflow チャートのアクティブ化を参照してください。

チャートの入力信号を単一のバス オブジェクトに統合する

バス オブジェクトを使用する場合は、生成される関数のパラメーター リストに含まれるパラメーターを減らします。このガイドラインは、チャートの出力信号にも適用されます。詳細については、Stateflow 構造体の定義を参照してください。

離散サンプル時間を使用する

Triggered Subsystem または Enabled Subsystem 内にない離散チャート用に生成されたコードでは、Simulink が提供する時間ではなく、整数カウンターを使用して時間を追跡します。生成されたコードではメモリの使用量が少なくなり、ソフトウェアインザループ (SIL) およびプロセッサインザループ (PIL) シミュレーション モードでコードを使用できるようになります。

ラピッド プロトタイピングおよび量産展開用のコードの生成

次の表は、コード生成に関する情報を目的に基づいて提示しています。

目的

Simulink Coder ドキュメンテーション

Embedded Coder ドキュメンテーション

C/C++ ソース コードの生成

ソース コードの生成 (Simulink Coder)

ソース コードの生成 (Embedded Coder)

C/C++ ソース コードの生成と実行可能ファイルのビルド

生成されたコードのコンパイル (Simulink Coder)

生成されたコードのコンパイル (Embedded Coder)

外部コードの統合

外部コードのインポート (Simulink Coder)

外部コードのインポート (Embedded Coder)

複数モデルでの使用を目的とした、移植可能な内蔵型ライブラリ内のライブラリ チャートのみを対象とする外部コードのインクルード

ライブラリ チャート用の外部コードの統合 (Simulink Coder)

ライブラリ チャート用の外部コードの統合 (Embedded Coder)

生成コードの最適化

コードの効率性 (Simulink Coder)

コードの効率性 (Embedded Coder)

生成コード内の Stateflow オブジェクトのトレーサビリティ

トレーサビリティ コメントにより次が得られます。

  • 生成されたコードの検証。コードの行に対応する Stateflow オブジェクトの識別に加え、レビューの実施/未実施を問わず、さまざまなオブジェクトのコードの追跡が可能です。

  • 大規模モデル用に生成されたコード内へのコメントのインクルード。生成コード内のオブジェクトの識別に加え、コメントや説明の手動入力の回避が可能です。

トレーサビリティ コメントを有効にするには、Embedded Coder または HDL Coder™ ソフトウェアがなければなりません。C/C++ のコード生成では、組み込みリアルタイム (ert) ベースのターゲットの生成コードにのみコメントが記述されます。詳細については、Trace Stateflow Elements in Generated Code (Embedded Coder)トレーサビリティを使用した Simulink モデルと HDL コード間の移動 (HDL Coder)を参照してください。

関連するトピック