Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

モデル インターフェイス要素の C コード生成の構成

コード ジェネレーターには、生成されたコードのデータの表現と、Embedded Coder® を使用している場合はエントリポイント関数の表現を制御するツールがあります。たとえば、コードの標準とガイドラインに準拠するようにコード生成のデータと関数を構成したり、生成されたコードを外部コードと統合したり、またはメモリ要件に対応したりできます。

コード ジェネレーターは、次のモデル データ要素と関数のコードを生成します。

  • アプリケーション コードの読み込み元および書き込み先となる入力端子、信号、状態、パラメーターなどのデータ。

  • モデル アルゴリズムを実行するためにアプリケーション コードによって呼び出される、model_step などのエントリポイント関数。

コード マッピング エディターまたはコード マッピング プログラミング インターフェイス (coder.mapping.api.CodeMapping) を使用してコード生成用にモデル データ要素および関数を構成できます。関数を構成するには Embedded Coder が必要です。データ要素の場合、Simulink データ オブジェクトを作成および構成する代わりに、またはそれに加えて、コード マッピング エディターまたはコード マッピング API を使用します。エディターと API を使用して以下を構成できます。

  • データ要素または関数のカテゴリに対してモデル全体に適用する既定のコード生成設定

  • 個々のデータ要素または関数に適用するコンフィギュレーション設定

以下の図は、全体的なワークフローを示しています。

Iterative flow diagram that shows steps of configuring default mappings, overriding default mappings for individual model elements, and creating code definitions for model elements.

移行

R2020b より前のリリースで作成されたモデルを開くと、Simulink® ではモデルで指定されたコード定義がモデル コード マッピングに移行されます。

必要に応じて、移行中に、モデルが使用する Embedded Coder ディクショナリが構成されます。モデルを保存すると、コード マッピングがモデルの一部として保存されます。

移行の影響および移行前の考慮事項など、詳細については、Migration of Model Data Configurations to Code Mappingsを参照してください。

コード定義

コード定義には、ストレージ クラス、関数カスタマイズ テンプレート、およびメモリ セクションが含まれます。ストレージ クラスでは、コード ジェネレーターが関連付けられたデータのコードを生成するときに使用する外観や場所などのプロパティを定義します。 関数カスタマイズ テンプレートでは、コード ジェネレーターによる関数のコードの生成方法を定義します。関数カテゴリでは、関数に名前を付けるときの規則およびメモリ内における関数定義の場所 (メモリ セクション) を定義できます。

メモリ セクションは、メモリにおけるデータおよび関数定義の配置を制御します。場合によっては、データ要素と関数を構成するときに必要な特定のメモリ セクションを選択できます。

コード ジェネレーターは、データ要素の事前定義されたコード定義を提供します。Embedded Coder がある場合は、Embedded Coder ディクショナリを使用してコード定義を作成および共有し、たとえば、複数のモデルから生成するコードを標準化したり、異なるアプリケーションのランタイム環境の定義を作成したりすることができます。カスタム定義を作成すると、事前定義では満たすことができないコード生成の目的を実現できます。データ要素の場合は、Embedded Coder カスタム ストレージ クラス デザイナーを使用して、パッケージで作成されたコード定義を作成するオプションもあります。

Embedded Coder ディクショナリを使用して作成したコード定義は、コード マッピング エディターに表示され、コード マッピング API を使用してアクセスできます。カスタム ストレージ クラス デザイナーを使用して作成した一部の定義では、それらの定義を参照するように Embedded Coder ディクショナリを構成することで、コード マッピング エディターに定義を表示することができます。

既定では、モデルに対して Embedded Coder ディクショナリを使用して作成したコード定義がモデル ファイルに保存されます。Simulink® データ ディクショナリに定義を保存して、モデルとプロジェクト間でコード定義を共有できます。データ ディクショナリを使用して、共有定義を変更するには、定義を 1 つの場所 (Embedded Coder ディクショナリ) で変更します。

詳細については、Define Storage Classes, Memory Sections, and Function Templates for Software ArchitectureおよびCreate Storage Classes by Using the Custom Storage Class Designerを参照してください。

データの既定の構成

モデル全体で、入力端子またはモデル ワークスペース パラメーターなど、データ要素のカテゴリの既定の構成を指定して、C コード生成用にモデルを準備する手間を省きます。既定の構成を適用すると、大きいモデルや、マルチインスタンス コードの生成に使用するモデルの場合は特に、時間が節約でき、コードのエラーの発生リスクを抑えることができます。

既定の構成は、参照モデルを除き、モデル全体に適用されます。Simulink では、モデル参照階層内に各モデルの一部としてコード マッピングの個別のセットが保存されます。

モデルに特定のカテゴリの多数の要素 (10 を超えるなど) が含まれる場合、既定の設定を使用してカテゴリを構成してから、特殊なケースでその設定をオーバーライドすると効率が上がります。

既定の設定を使用することで、手動のデータ入力を削減できます。

  • ブロックおよび信号をモデルに追加するときに、新しいデータ要素が既定の設定を継承します。

  • 多くのデータ要素のコード生成設定を一度に変更するには、変更を 1 か所で実行します (既定の設定)。

  • 効率化のために、モデルの他の場所で変更を行うときは命名規則を使用します。

データの既定の設定を構成するには、コード マッピング エディター[データの既定の設定] タブまたは関数 setDataDefault を使用します。

モデル データのカテゴリ

データの既定の設定を構成するには、コード マッピング エディター[データの既定の設定] タブまたは関数 setDataDefault を使用します。[Data Defaults] タブまたは関数の呼び出しで、以下のデータ要素のカテゴリを選択または指定できます。

モデル要素のカテゴリ説明
InportsInport ブロックや In Bus Element ブロックなど、モデルのルートレベルの入力端子。
OutportsOutport ブロックや Out Bus Element ブロックなど、モデルのルートレベルの出力端子。
Signals, states, and internal dataブロックの出力信号、ブロックの離散状態、データ ストア、ゼロクロッシング信号など、モデル内部のデータ要素。
Shared local data storesブロック パラメーター [モデル インスタンス間で共有する] が設定されている Data Store Memory ブロック。これらのデータ ストアは、それらが定義されているモデルでのみアクセスできます。データ ストア値は、モデルのインスタンス間で共有されます。
Global data storesベース ワークスペースまたはデータ ディクショナリの信号オブジェクトで定義されるデータ ストア。アプリケーション内の複数のモデルがこれらのデータ ストアを使用できます。コード マッピング エディターでこれらのデータ ストアを表示および構成するには、カテゴリ名の右側にある [Refresh] リンクをクリックします。このリンクをクリックすると、モデル線図が更新されます。
Model parameter argumentsモデルの引数として設定するモデル ワークスペースのパラメーター。これらのパラメーターは Model ブロックで公開され、各モデル インスタンスは独自の値を提供できます。モデルの引数としてパラメーターを指定するには、[モデル データ エディター][Parameters][Argument] チェック ボックスをオンにします。
Model parametersモデル ワークスペース内のパラメーターなど、モデル内で定義されるパラメーター。モデルの引数は除きます。
External parametersベース ワークスペースまたはデータ ディクショナリ内でオブジェクトとして定義するパラメーター。アプリケーションの複数のモデルがこれらのパラメーターを使用できます。コード マッピング エディターでこれらのパラメーターを表示および構成するには、カテゴリ名の右側にある [Refresh] リンクをクリックします。このリンクをクリックすると、モデル線図が更新されます。
Constants

インライン化できなかった定数値のブロック出力とパラメーター。これらの値は、次のいずれかの理由で変数に格納されます。

  • 値がループ展開のしきい値よりも大きい配列である。

  • 値のアドレスがコードに必要である。

データ要素のカテゴリに対して既定のストレージを [既定の設定] に設定する場合、メモリ セクションを指定するオプションがあります。

データに対する既定のコード生成の設定を構成する際の考慮事項

データ要素に対して既定のコード生成設定を構成する前に、以下の表の考慮事項を検討してください。

考慮事項詳細
モデルに関連のあるカテゴリ前の表のデータ要素カテゴリ
モデルはカテゴリ内にあるデータの複数のインスタンスを使用しますか。使用する場合は、既定のマッピングを適用すると役に立ちます。使用しない場合は、各データ要素のコード生成を個別に構成することを検討してください。
各カテゴリのコード生成要件と一致するのはどのストレージ クラスですか。 生成されたコードでのデータ表示を制御するストレージ クラスの選択
モデル データを構造化しますか。たとえば、マルチインスタンスのコード生成用にモデルを構成した場合、構造体によってコードの効率性と可読性が高まります。生成されたコードにおける構造体へのデータの整理
メモリの特定の領域にデータを保存するためにコード ジェネレーターが必要ですか。たとえば、低速のメモリに初期化データを格納し、高速のメモリにアルゴリズム データまたは計算データを格納するかどうかを検討します。
最適化によってコードから特定のデータが除外されないようにしますか。 最適化によるデータのカテゴリの消去
コード マッピング エディターで選択できる新しいストレージ クラスを定義する必要がありますか。

モデル要素の 1 つ以上のカテゴリを構成した後に、メモリ セクションと [共有ユーティリティ識別子の形式] モデル コンフィギュレーション パラメーターを設定しても、モデル コンフィギュレーションには影響しません。Coder アプリを開くと、Simulink では、モデル コンフィギュレーション パラメーターの設定がコード マッピング エディターに移行されます。Migration of Memory Section and Shared Utility Settings from Configuration Parameters to Code Mappingsで説明されているように、移行中に、モデルが使用する Embedded Coder ディクショナリが構成されます。

最適化によるデータのカテゴリの消去

コード生成の最適化によって、コードからデータが消去されることがあります、つまり、アプリケーション コードでデータを操作できなくなります。最適化によるデータ消去の一般的な情報については、生成されたコードによる内部信号、状態、パラメーター データの保存方法を参照してください。

最適化によってデータが消去されるのは、次のカテゴリだけです。

  • Model parameters

  • Model parameter arguments

  • External parameters

  • Internal data

最適化によりデータを消去した後、コード ジェネレーターは、コード マッピングの既定のコード生成設定を残りのデータに適用します。パラメーターと信号線の場合、最適化によりカテゴリ全体のデータが消去される可能性があります。この消去が実行されると、そのカテゴリに指定した既定の設定はデータに適用されません。

最適化による個々のデータ要素の消去を回避するには、ストレージ クラスを個々の要素に明示的に適用します。ストレージ クラスは、生成されたコード内のデータの外観を制御します。データ要素に指定した既定のストレージ クラスを使用させるには、ストレージ クラスの [Model default] を明示的に適用します。生成されたコードでのデータ表示を制御するストレージ クラスの選択を参照してください。

共有ディクショナリのデータの既定値

データのカテゴリに対して既定のコード定義を設定するコーダー ディクショナリが含まれる Simulink データ ディクショナリにモデルをリンクする場合、コード マッピング エディターを使用してディクショナリの既定の設定を適用できます。コード マッピング エディターの [Data Defaults] タブで、カテゴリを選択し、ストレージ クラスを [Dictionary Default] に設定します。誰かが共有されたコーダー ディクショナリで既定の設定を変更すると、コード ジェネレーターでモデルのコードが生成されるときに更新された既定値が適用されます。Configure Default Code Mapping in a Shared Dictionaryを参照してください。

関数の既定の構成

モデル全体で初期化/終了関数や実行関数などの関数のカテゴリの既定の構成を指定することで、C コード生成用にモデルを準備する手間が省けます。既定の構成を適用すると、大きいモデルや、マルチインスタンス コードの生成に使用するモデルの場合は特に、時間が節約でき、コードのエラーの発生リスクを抑えることができます。

既定の構成は、参照モデルを除き、モデル全体に適用されます。Simulink では、モデル参照階層内に各モデルの一部としてコード マッピングの個別のセットが保存されます。

モデルに特定のカテゴリの多数の関数 (10 を超えるなど) が含まれる場合、既定の設定を使用してカテゴリを構成してから、特殊なケースでその設定をオーバーライドすると効率が上がります。

既定の設定を使用することで、手動のデータ入力を削減できます。

  • ブロックと信号をモデルに追加するときに、新しい関数は既定の設定を継承します。

  • 多くの関数のコード生成設定を一度に変更するには、1 か所 ([既定の設定]) で変更を行います。

  • 効率化のために、モデルの他の場所で変更を行うときは命名規則を使用します。

モデル関数のカテゴリ

関数の既定値を変更するには、コード マッピング エディター[関数の既定の設定] タブまたは関数 setDataDefault を使用します。[関数の既定の設定] タブまたは関数呼び出しで、以下の関数カテゴリを選択または指定できます。

モデル関数のカテゴリ説明
初期化/終了初期化と終了のエントリポイント関数
実行実行とリセットを開始するためのエントリポイント関数
共有ユーティリティ共有されたユーティリティ関数

コード ジェネレーターは、既定の命名規則を使用してエントリポイント関数に名前を付けます。生成されたコードを既存の外部コードと統合するか、命名規約またはガイドラインに準拠するには、既定の命名規則を調整できます。既定の命名規則を調整すると、特にコード ジェネレーターによって各レートに固有の関数 step が生成されるマルチレート モデルの場合は時間を節約できます。

Embedded Coder ディクショナリで、関数カスタマイズ テンプレートを定義しなければならない場合があります。誰かがモデルに対して関数カスタマイズ テンプレートを定義しない限り、コード マッピング エディターでは唯一のテンプレート オプションとして Default が提示されます。

関数に既定のコード生成設定を構成する際の考慮事項

関数に既定のコード生成設定を構成する前に、次の表に示されている考慮事項を検討してください。

考慮事項詳細
モデルに関連のあるカテゴリ前の表の関数カテゴリ
モデルはカテゴリに含まれる関数の複数のインスタンスを使用しますか。使用する場合は、既定のマッピングを適用すると役に立ちます。使用しない場合は、コード生成を関数ごとに個別に構成することを検討してください。モデルのエントリポイント関数に対する C コード生成の構成
各カテゴリのコード生成要件と一致する関数カスタマイズ テンプレートはどれですか。 Define Storage Classes, Memory Sections, and Function Templates for Software Architecture
メモリの特定の領域に関数コードを保存するために、カテゴリはコード ジェネレーターを必要としますか。たとえば、低速のメモリに初期化データを格納し、高速のメモリにアルゴリズム データまたは計算データを格納するかどうかを検討します。
コード マッピング エディターで選択できる新しい関数カスタマイズ テンプレートを定義する必要がありますか。
関数の名前付けの要件がありますか。ある場合は、どのような要件ですか。要件が適用されるカテゴリはどれですか。

モデル要素の 1 つ以上のカテゴリを構成した後に、メモリ セクションと [共有ユーティリティ識別子の形式] モデル コンフィギュレーション パラメーターを設定しても、モデル コンフィギュレーションには影響しません。Coder アプリを開くと、Simulink では、モデル コンフィギュレーション パラメーターの設定がコード マッピング エディターに移行されます。Migration of Memory Section and Shared Utility Settings from Configuration Parameters to Code Mappingsで説明されているように、移行中に、モデルが使用する Embedded Coder ディクショナリが構成されます。

共有ディクショナリの関数の既定値

関数のカテゴリに対して既定のコード定義を設定するコーダー ディクショナリが含まれる Simulink データ ディクショナリにモデルをリンクする場合、コード マッピング エディターを使用してディクショナリの既定の設定を適用できます。コード マッピング エディターの [関数の既定の設定] タブで、カテゴリを選択し、関数カスタマイズ テンプレートを [Dictionary Default] に設定します。誰かが共有されたコーダー ディクショナリで既定の設定を変更すると、コード ジェネレーターでモデルのコードが生成されるときに更新された既定値が適用されます。Configure Default Code Mapping in a Shared Dictionaryを参照してください。

個々のデータ要素および関数の構成

モデル全体の既定の設定を構成した後に、個々のデータ要素および関数の既定値をオーバーライドできます。個々のデータ要素または関数の構成は、モデル内の特定のデータ要素または関数に適用されます。データ要素および関数を個別に構成するのは、以下の場合です。

  • モデルに、一意のソース、名前付け、または配置の要件を持つ特定のカテゴリの要素がいくつか含まれている。

  • 既定の設定を構成済みで、個々の要素の既定の設定をオーバーライドする必要がある。

個々のデータ要素では、最初にストレージ クラスが [Auto] に設定されています。つまり、コード ジェネレーターは最適化の目的で関連コードの表示を消去または変更する可能性があります。最適化が不可能な場合、コード ジェネレーターはモデルの既定の構成を適用します。

  • 最適化を回避し、コード ジェネレーターで既定の構成が強制的に使われるようにするには、ストレージ クラスを [Model default] に設定します。

  • 既定の構成をオーバーライドするには、そのデータ要素のコード生成に関する要件を満たすストレージ クラスを指定します。

モデル内のデータ要素に名前がない場合 (たとえば、信号にラベルがない、状態に名前がないなど)、C コード生成用に設定するときに、そのデータ要素のコード識別子を指定しなければなりません。ストレージ クラス プロパティ [Identifier] の値を指定することで、コード識別子を設定します。

個々の関数に対して、関数名をカスタマイズできます。モデルのステップ関数や Simulink 関数などの実行関数では、関数の引数を設定できます。

データの構成

  1. Embedded Coder アプリを開きます。

  2. データ要素のカテゴリに対する既定のマッピングを構成します。[コード インターフェイス][既定のコード マッピング] を選択します。コード マッピング エディターの [Data Defaults] タブで、モデル要素のカテゴリを選択し、ストレージ クラスを設定します。プロパティ インスペクターで、モデル要件に合わせてストレージ クラスのプロパティを設定します。

    ストレージ クラスを定義する必要がある場合は、Embedded Coder ディクショナリを使用します。[コード インターフェイス][Embedded Coder ディクショナリ]を選択します。

  3. 個々のデータ要素の既定の構成設定をオーバーライドするかどうかを決定します。設定をオーバーライドしない場合は、手順 8 に進みます。

  4. 個別に構成する MATLAB 変数を特定し、モデル ファイルにコンフィギュレーションを保存します。モデル エクスプローラーで、変数を Simulink.Parameter オブジェクトに変換します。結果のデータ オブジェクトがモデル パラメーターとしてコード マッピング エディターに表示されます。

  5. 生成コードの実行中に監視するアルゴリズム データを表す信号を特定し、それらの信号を個別に構成します。特定した信号ごとに、次のいずれかを実行します。

    • モデルに固有の (共有されていない) 信号データの場合は、信号をコード マッピング エディターに追加する。

    • 共有されている信号データの場合は、Simulink.Signal オブジェクトを作成し、構成する。

  6. 個々のデータ要素を構成します。コード マッピング エディターで、カテゴリ タブをクリックし、データ要素を選択して、ストレージ クラスを設定します。プロパティ インスペクターで、ストレージ クラスのプロパティ値を設定します。モデル コンフィギュレーション パラメーター [既定のパラメーター動作] の設定を変更するには、ストレージ クラスが [Auto] に設定されている場合の動作を示すリンクをクリックします。[モデル コンフィギュレーション パラメーター] ダイアログ ボックスで、パラメーターの設定を [調整可能] または [インライン] に変更します。

    特定のタイプのデータ要素の構成については、以下を参照してください。

  7. ベース ワークスペースまたはデータ ディクショナリ内に保存されている外部データ オブジェクトを表示および構成するには、コード マッピング エディターの [Data Defaults] タブで、カテゴリ名の右にある [Refresh] リンクをクリックします。

  8. コードの生成とレビュー

詳細と例については、以下を参照してください。

関数の設定

  1. Embedded Coder アプリを開きます。

  2. 関数のカテゴリに関する既定のマッピングを設定します。[コード インターフェイス][既定のコード マッピング] を選択します。コード マッピング エディターの [関数の既定の設定] タブで、関数カテゴリを選択し、関数カスタマイズ テンプレートを設定します。

    関数カスタマイズ テンプレートを定義しなければならない場合があります。テンプレートは既定では使用できません。関数カスタマイズ テンプレートを定義するには、Embedded Coder ディクショナリを使用します。[コード インターフェイス][Embedded Coder ディクショナリ]を選択します。

  3. 個々の関数の既定の構成設定をオーバライドするかどうか決定します。設定をオーバーライドしない場合は、手順 5 に進みます。

  4. 個々のエントリポイント関数を設定します。コード マッピング エディターの [Function] タブで、関数を選択し、関数カスタマイズ テンプレートを設定します。または、関数名を指定できます。モデルのステップ関数など、実行関数の場合は、関数の引数をカスタマイズできます。関数のプレビュー リンクをクリックすると、関数インターフェイス全体をカスタマイズするために使用できるダイアログ ボックスが開きます。

  5. コードの生成とレビュー

詳細と例については、以下を参照してください。

参考

| |

関連するトピック