このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
C コード生成のパラメーターの構成
コード生成用にモデルを構成するときに、キャリブレーションなどの調整可能性のパラメーターを特定して構成できます。構成できるパラメーターのタイプを次の表に示します。
| パラメーターのタイプ | 説明 |
|---|---|
| モデル パラメーター | モデル ワークスペース内のパラメーターなど、モデル内で定義されたパラメーター。 |
| 外部パラメーター | ベース ワークスペース内またはデータ ディクショナリ内でオブジェクトとして定義されたパラメーター。 |
コード生成用にパラメーターを構成するには、そのパラメーターをデータ オブジェクトと関連付けなければなりません。たとえば、コード生成用に MATLAB 変数を構成する前に、モデル エクスプローラーでその変数をパラメーター オブジェクトに変換します。
[Simulink Coder] アプリでモデルを開くと、データ オブジェクトに関連付けられているモデル パラメーターがコード マッピング エディターに表示されます。エディターで、コード生成用にパラメーターを構成できます。モデルが外部パラメーターを使用する場合、パラメーター名の右にある Refresh リンクをクリックしてそれらをコード マッピング エディターに追加できます。このリンクにより、ブロック線図の更新が開始され、エディター ビューに、モデルによって使用される外部パラメーターが追加されます。
以下を実行するようにパラメーター データを構成します。
生成コードの実行中に操作するためにデータをアクセス可能にする。
メモリに格納されるデータの量を最小限に抑える。
パラメーター データをモデル インターフェイスにプロモートし、その他のコンポーネントおよびシステムがそのデータにアクセスできるようにする。
生成されたコードの可読性およびトレーサビリティを向上させる。
モデル全体のパラメーターが調整可能かどうかを制御するために、コード マッピング エディターの [Data Defaults] タブで 'Auto' will be tunable/inline リンクを使用し、モデル コンフィギュレーション パラメーター [既定のパラメーター動作] にアクセスできます。たとえば、以下のような場合、このリンクを使用してパラメーターを調整可能にすることができます。
ラピッド プロトタイピング時にパラメーター設定を調整する
パラメーターをキャリブレーションする
量産コード用にパラメーターを最適化する
コード生成用に、例ではモデル ConfigurationRapidPrototypingInterface のモデル パラメーターおよびモデル パラメーター引数の構成方法を説明します。コード マッピング エディター – C またはコード マッピング プログラミング インターフェイス (coder.mapping.api.CodeMapping) を使用してコード マッピングを構成できます。
パラメーターのカスタマイズ オプションの選択
既定では、モデルのパラメーターは、生成されたコードでは という名前のグローバル データ構造体のフィールドとして表示されます。コード インターフェイスの要件に基づいて、パラメーター データの生成をカスタマイズするかどうかを決定します。カスタマイズを構成しない場合、コード ジェネレーターは生成されたコード内のパラメーターの表現を最適化目的で削除するか変更するかを判断します。カスタマイズを構成する場合は、以下を決定します。model_P
既定の構成を設定するかどうか
調整可能にしなければならないカテゴリのパラメーターがモデルに多数含まれる場合 (たとえば、10 個以上)、特殊なケースについてその設定をオーバーライドするより、既定の設定を使用してそのカテゴリのパラメーターを構成する方が効率的です。一意のソース、命名規則、または配置要件をもつ指定されたカテゴリのパラメーターがモデルに少数含まれる場合は、個々のパラメーターを構成することを検討してください。
生成されたコード内でモデル パラメーター データを宣言して処理する方法
個別のグローバル変数として
外部コードで定義されたグローバル変数からモデル パラメーター データを読み取るため
アクセス関数への呼び出しとして。Embedded Coder® が必要
これらのオプションの詳細については、生成コードでのデータと関数インターフェイスの制御を参照してください。
モデル パラメーターのその他の考慮事項には、次を実行するかどうかが含まれます。
生成されたコード内のパラメーターに、モデル内のパラメーター名または一意のコード識別子を使用して名前を付ける。
コンパイラ フラグまたはオプションで定義されるプリプロセッサの条件をサポートする。Embedded Coder が必要です。Compile Code Conditionally for Variations of Component Represented Using Variant Blockを参照してください。
グローバル変数定義と宣言に
static型修飾子を含めて、たとえば、名前の衝突を防ぐ。Embedded Coder が必要です。Prevent Name Clashes by Configuring Data Item as static (Embedded Coder)を参照してください。グローバル変数定義と宣言に
const、volatile、constおよびvolatile型修飾子を含める。Embedded Coder が必要です。型修飾子 const と volatile を使用したグローバル データの保護 (Embedded Coder)を参照してください。マクロ (
#define) または外部ヘッダー ファイルに定義されたマクロを使用するコードを生成する。Embedded Coder が必要です。マクロ定義 (#define) (Embedded Coder)を参照してください。指定する名前をもつグローバル データ構造体を生成する。Embedded Coder が必要です。生成されたコードにおける構造体へのデータの整理 (Embedded Coder)を参照してください。
特定のメモリ領域にパラメーター データを配置する。Embedded Coder が必要です。Control Data and Function Placement in Memory by Inserting Pragmas (Embedded Coder)を参照してください。
対応するストレージ クラスおよびストレージ クラスのプロパティをもつパラメーターに関連するインターフェイスの要件のリストについては、データ ストアのストレージ クラスおよびストレージ クラス プロパティの選択を参照してください。
モデル例 ConfigurationRapidPrototypingInterface のパラメーターの要件は次のとおりです。
既定の設定では、調整用に生成されたコードにモデル パラメーターを保持します。パラメーターをインライン化してコードを最適化しないでください。
接頭辞
mp_をモデル パラメーターを表す変数の名前に適用します。
この例では、これらのコード生成要件を満たすように、ConfigurationRapidPrototypingInterface でモデルパラメーターを構成します。
パラメーターに対する既定のコード生成設定の構成
パラメーターに対する既定のコード生成設定により、生成コードの実行中に操作しなければならないパラメーターが多数あるモデルの場合は特に、コード生成用にモデルを準備する作業を軽減できます。構成設定を 1 度選択すると、コード ジェネレーターによってこれらの設定がモデル全体のパラメーターに適用されます。Simulink® は既定の構成をモデルの一部として保存します。
一意の要件をもたない同じカテゴリに対して、モデルで複数のパラメーターを使用する場合、モデル パラメーターに対して既定のコード生成設定を構成することを検討してください。
この例では、コード マッピング エディター – C を使用して、モデル ConfigurationRapidPrototypingInterface に対するモデル パラメーターに既定の設定を構成する方法を示します。調整可能であり、生成コードで個別のグローバル変数として定義および宣言されるように、モデル パラメーターを構成します。
モデル
ConfigurationRapidPrototypingInterfaceを開きます。openExample("ConfigurationRapidPrototypingInterface")
Simulink Coder アプリを開きます。
[C コード] タブで、[コード インターフェイス] 、 [既定のコード マッピング] を選択します。
コード マッピング エディターの [パラメーター] で、カテゴリ [Model parameters] を選択します。リンク テキスト
'Auto' will be inlinedは、コード ジェネレーターが既定の設定でモデル パラメーターをインライン化するように構成されていることを示します。この例では、モデル パラメーターが調整可能であることが要件です。'Auto' will be inlinedをクリックします。[モデル コンフィギュレーション パラメーター] ダイアログ ボックスで、モデル コンフィギュレーション パラメーター [既定のパラメーター動作] を
[調整可能]に設定します。変更を保存し、ダイアログ ボックスを閉じます。コード マッピング エディターで、リンク テキストが'Auto' will be tunableに変更されます。コード マッピングで、[Model parameters] カテゴリがまだ選択された状態で、ストレージ クラスを
[ExportedGlobal]に設定します。
モデルを保存します。
個々のパラメーターに対するコード生成の構成
コード生成に対する個々のパラメーターを構成できます。たとえば、一意のコード生成要件がある同じカテゴリのパラメーターがモデルに 2 つある場合、これらのパラメーターを個別に構成します。または、パラメーターのカテゴリに対して既定の設定を構成する場合、特定のパラメーターに対してこれらの設定をオーバーライドできます。
モデルが以下の条件のうち少なくとも 1 つを満たす場合、パラメーターに対して個別にコード生成設定を構成することを検討してください。
一意のソース、命名規則、または配置要件をもつカテゴリが同じ複数のパラメーターを使用する。
カテゴリが同じパラメーターを少数使用する。
複数のパラメーターのカテゴリに対する既定の構成があり、いくつかの特定のパラメーターに対してオーバーライドしなければならない。
この例では、コード マッピング エディターを使用して、モデル パラメーターの既定のストレージ クラス設定をモデル ConfigurationInterface 内のパラメーター K1、Table1 および Table2 に適用する方法を示します。これらのパラメーターのコード識別子を構成します。コード生成識別子は、たとえば統合用に、モデル設計の変更を伴わずに指定できます。
まだ実行していない場合は、パラメーターに対する既定のコード生成設定の構成の手順を完了します。
[Model parameters] を展開します。既定では、各パラメーターのストレージ クラスは
Autoに設定されます。ストレージ クラスをExportedGlobalに指定するモデルの既定の構成を使用します。最適化を回避し、コード ジェネレーターで既定の構成が強制的に使われるようにするには、ストレージ クラスを
[Model default]に設定します。既定の構成をオーバーライドするには、そのパラメーターのコード生成に関する要件を満たすストレージ クラスを指定します。
コード マッピング エディターの [Model parameters] で、パラメーター
K1、Table1、Table2を選択します。ストレージ クラスを[Model default:ExportedGlobal]に設定します。
モデル パラメーターのコード識別子を接頭辞
mp_を含む名前で構成します。コード マッピング エディターで、モデル パラメーターK1を選択します。
アイコンをクリックして、ストレージ クラス プロパティ [識別子] を mp_K1に設定します。パラメーターTable1およびTable2について、[Identifier] をmp_Table1およびmp_Table2に設定します。
モデルを保存します。
コードを生成して表示します。たとえば、
ConfigurationRapidPrototypingInterface.cでモデル パラメーターmp_K1のデータ定義を見つけます。int8_T mp_K1 = 2;
ステップ エントリポイント関数内でパラメーターが使用されている場所を見つけます。
if (mode) { output = (real_T)mp_K1 * dout_Table1; } else { output = dstate_X; }
パラメーターに対するコード生成設定のプログラムによる構成
コード生成用にパラメーターの構成を自動化するには、コード マッピングのプログラミング インターフェイスを使用します。たとえば、カスタム ブロック ライブラリまたはアプリケーション テスト環境の一部を作成する場合は、プログラミング インターフェイスを使用してデータの構成を自動化します。
この例では、モデル ConfigurationRapidPrototypingInterface に対するモデル パラメーターに既定の設定を構成する方法を示します。調整可能であり、生成コードで個別のグローバル変数として定義および宣言されるように、モデル パラメーターを構成します。モデル パラメーターの既定のストレージ クラス設定をパラメーター K1、Table1 および Table2 に適用します。これらのパラメーターのコード識別子を構成します。
モデル例を開きます。
openExample("ConfigurationRapidPrototypingInterface")モデル コンフィギュレーション パラメーター [既定のパラメーター動作] を
[調整可能]に設定します。model = "ConfigurationRapidPrototypingInterface"; set_param(model,"DefaultParameterBehavior","Tunable");
関数
coder.mapping.api.getを呼び出してオブジェクトcmを作成します。オブジェクトには、モデルConfigurationRapidPrototypingInterfaceのデータ要素についてのコード生成の構成が格納されます。cm = coder.mapping.api.get("ConfigurationRapidPrototypingInterface");関数
setDataDefaultを呼び出してモデル パラメーターの既定の設定を構成します。引数には、次の値を指定します。coder.mapping.api.getで返されるオブジェクト既定のカテゴリの
ModelParametersプロパティ値
ExportedGlobalをもつプロパティ名StorageClass
setDataDefault(cm,"ModelParameters","StorageClass","ExportedGlobal");
モデル パラメーターの既定の構成を確認します。
coder.mapping.api.getで返されるオブジェクト、カテゴリModelParameters、およびStorageClassを指定するgetDataDefaultへの呼び出しを発行します。getDataDefault(cm,"ModelParameters","StorageClass")
ans = 'ExportedGlobal'モデル パラメーターの既定の構成をパラメーター
K1、Table1およびTable2に適用します。既定の設定では、Simulink は個々のパラメーターのストレージ クラスを
Autoに設定します。ストレージ クラスがAutoの場合、コード ジェネレーターは次を行います。最適化目的で生成されたコードからデータを削除するかどうかを決定する。
データを保持する場合、既定の構成設定を考慮して、生成されたコード内でデータを効率的に表す方法を決定する。
コード ジェネレーターを構成して、既定のモデル パラメーター設定をパラメーター
K1、Table1、およびTable2に適用します。パラメーターごとに関数setModelParameterを呼び出します。coder.mapping.api.getから返されるオブジェクト、パラメーター名、プロパティ名StorageClass、およびプロパティ値Model defaultを指定します。setModelParameter(cm,"K1","StorageClass","Model default"); setModelParameter(cm,"Table1","StorageClass","Model default"); setModelParameter(cm,"Table2","StorageClass","Model default");
関数
getModelParameterへの呼び出しを使用して、パラメーターK1、Table1およびTable2の構成の変更を確認します。getModelParameter(cm,"K1","StorageClass")
ans = 'Model default'getModelParameter(cm,"Table1","StorageClass")
ans = 'Model default'getModelParameter(cm,"Table2","StorageClass")
ans = 'Model default'モデル パラメーターのコード識別子を構成します。パラメーターごとに関数
setModelParameterを呼び出します。coder.mapping.api.getから返されるオブジェクト、パラメーター名、プロパティ名Identifier、および次のいずれかのプロパティ値を指定します。モデル パラメーター コード識別子 K1mp_K1Table1mp_Table1Table2mp_Table2setModelParameter(cm,"K1","Identifier","mp_K1"); setModelParameter(cm,"Table1","Identifier","mp_Table1"); setModelParameter(cm,"Table2","Identifier","mp_Table2");
関数
getModelParameterへの呼び出しを使用して、モデル パラメーターの構成の変更を確認します。getModelParameter(cm,"K1","Identifier")
ans = 'mp_K1'getModelParameter(cm,"Table1","Identifier")
ans = 'mp_Table1'getModelParameter(cm,"Table2","Identifier")
ans = 'mp_Table2'モデルを保存します。
コードを生成して表示します。たとえば、
ConfigurationRapidPrototypingInterface.cでモデル パラメーターmp_K1のデータ定義を見つけます。int8_T mp_K1 = 2;
ステップ エントリポイント関数内でパラメーターが使用されている場所を見つけます。
if (mode) { output = (real_T)mp_K1 * dout_Table1; } else { output = dstate_X; }
モデル パラメーターに対するストレージ クラスおよびストレージ クラスのプロパティの選択
コード生成の要件に応じて、モデル パラメーターに対してコード生成を構成するストレージ クラスを、利用可能なストレージ クラスのリストから選択します。
メモ
定数の場合、
[Default]のストレージ クラスのみが適用されます。モデル パラメーター引数の場合、
[Auto]、[Default]、および[Model default]ストレージ クラスのみが適用されます。最上位モデルは、モデル パラメーター引数の個別のマッピングをサポートしません。最上位モデルのモデル パラメーター引数に
[自動]ストレージ クラスを選択すると、コード ジェネレーターは引数をインライン化します。
| 要件 | 既定のマッピングのストレージ クラス | 個別のマッピングのストレージ クラス |
|---|---|---|
| 最適化できないデータ要素の場合、データを標準のデータ構造体のフィールドとして表します。 | Default | |
| より効率的なコードを生成するように、最適化を有効にします。 | Auto | |
| 最適化によってデータ要素のストレージが削除されるのを防ぎ、データ要素のカテゴリに対して既定のマッピングを使用します。 | Model Default | |
| スタンドアロンのグローバル変数を生成します。生成されたコードには変数の宣言と定義が含まれます。 | ExportedGlobal | ExportedGlobal |
| スタンドアロンのグローバル変数またはグローバル変数ポインターを生成します。生成されたコードには、変数またはポインター宣言が含まれます。外部コードによって定義が提供されます。 | ImportedExtern, ImportedExternPointer | ImportedExtern, ImportedExternPointer |
使用可能なストレージ クラスのリストには、Embedded Coder ディクショナリで定義された他のプロジェクト固有のストレージ クラスが含まれている可能性があります。リストされているストレージ クラスでは満たされない特別な要件がある場合、Embedded Coder ソフトウェアをお持ちであれば、ストレージ クラスを定義できます。Define Service Interfaces, Storage Classes, Memory Sections, and Function Templates for Software Architecture (Embedded Coder)を参照してください。
個々のモデル パラメーターに対して、[Identifier] ストレージ クラス プロパティを使用して生成されたコード内のパラメーターを表す変数の名前を構成します。
参考
コード マッピング エディター – C | coder.mapping.api.CodeMapping