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 オブジェクトに対して生成されたコードを最適化するための設計のヒント

マシンを親とするデータにはアクセスしない

この制限を設けると、グラフィカル関数に対して生成されたコードには、パラメーターの長いリストが表示されません。グラフィカル関数と同じチャートに存在するローカル データにはアクセスできます。詳細については、グラフィカル関数の定義によるロジック パターンの再利用を参照してください。

さらに、Embedded Coder はマシンを親とするデータでのコード置換ライブラリの使用をサポートしません。詳細については、Code You Can Replace From Simulink Models (Embedded Coder)を参照してください。

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

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)

生成コードの最適化

boolean 変数およびステート コンフィギュレーション変数に関するメモリ使用量の削減 (Simulink Coder)

boolean 変数およびステート コンフィギュレーション変数に関するメモリ使用量の削減 (Embedded Coder)

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

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

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

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

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

関連するトピック