このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。
コード生成用のバリアントが含まれるモデルの準備
Embedded Coder® を使用すると、1 つ以上のバリアントの選択肢が含まれる Simulink® モデルからコードを生成できます。生成されたコードには各バリアントの選択のアクティベーションを制御するプリプロセッサの条件が含まれます。
メモ
Simulink は、コード生成のための Variant Simulink Function を含むマルチインスタンス参照モデルを使用することをサポートします。
STF_make_rtw_hook
ファイルを使用してビルド プロセスをカスタマイズする方法の詳細については、STF_make_rtw_hook ファイルによるビルド プロセスのカスタマイズ (Simulink Coder)を参照してください。
バリアント制御変数の Simulink.Parameter
オブジェクトへの変換
MATLAB® 変数を使用すると、モデルの作成時にバリアント制御式のプロトタイプ作成を迅速に行い、コード生成のプリプロセッサの条件を生成することができます。ただし、他のコード生成属性 (データ型など) を指定する場合、MATLAB 変数を Simulink.Parameter
オブジェクトに変換できます。
MATLAB バリアント制御変数を
Simulink.Parameter
オブジェクトに置き換えるモデルを指定します。model = 'my_model_containing_variant_choices'; open_system(model);
バリアント制御変数で参照される変数を取得します。
vars = Simulink.VariantManager.findVariantControlVars(model)
vars = 4x1 struct array with fields: Name Value Exists Source SourceType
コードの実行時に変数定義がインポートされるように、バリアント制御値を指定するための外部ヘッダー ファイルを作成します。
headerFileName = [model '_importedDefines.h']; headerPreamble = strrep(upper(headerFileName),'.','_'); fid = fopen(headerFileName,'w+'); fidErr = (fid == -1); if (fidErr) fprintf('There was an error creating header file %s:\n',... headerFileName); else fprintf('+++ Creating header file ''%s'' with variant control variable definitions.\n\n',... headerFileName); fprintf(fid, '#ifndef %s\n', headerPreamble); fprintf(fid, '#define %s\n', headerPreamble); end
Simulink.Parameter
オブジェクトとして定義されたバリアント制御変数は、次のいずれかのストレージ クラスをもつことができます。ヘッダー ファイルが指定された
Define
またはImportedDefine
CompilerFlag
SystemConstant (AUTOSAR)
データをマクロとして定義する独自のストレージ クラス
メモ
アクティベーションのタイミングが
startup
のコードを生成する場合は、オブジェクトのサポートされるカスタム ストレージ クラスを指定します。startup
のアクティベーションのタイミングをサポートする組み込みおよびカスタムのストレージ クラスの詳細については、Storage Classes for Different Variant Activation Timesを参照してください。すべての MATLAB 変数をループしてそれらを
Simulink.Parameter
オブジェクトに変換します。count = 0; for countVars = 1:length(vars) var = vars(countVars).Name; val = vars(countVars).Value; if isa(val, 'Simulink.Parameter') % Do nothing continue; end count = count+1; % Create and configure Simulink.Parameter objects % corresponding to the control variable names. % Specify the storage class as Define (Custom). newVal = Simulink.Parameter(val); newVal.DataType = 'int16'; newVal.CoderInfo.StorageClass = 'Custom'; newVal.CoderInfo.CustomStorageClass = 'Define (Custom)'; newVal.CoderInfo.CustomAttributes.HeaderFile = headerFileName; Simulink.data.assigninGlobal(model, var, newVal); if ~fidErr fprintf(fid, '#endif\n'); fclose(fid); end end
メモ
Define
ストレージ クラスについてはヘッダー ファイルを空にすることができます。
プリプロセッサ条件を生成するためのモデルの構成
Variant Subsystem ブロックまたは Variant Model ブロック内でバリアントの選択を表現する場合、バリアントのそれぞれの選択に対して生成されるコードは、C のプリプロセッサ条件 #if
、#else
、#elif
および #endif
によって囲まれます。
Variant Source ブロックまたは Variant Sink ブロックを使用してバリアントの選択を表現する場合、バリアントのそれぞれの選択に対して生成されるコードは、C のプリプロセッサ条件 #if
と #endif
によって囲まれます。
このため、アクティブなバリアントはコンパイル時に選択され、プリプロセッサ条件によってコードのどのセクションが実行されるかが決まります。
メモ
コードを生成するには Embedded Coder のライセンスが必要です。
Simulink ツールストリップの [モデル化] タブで、[モデル設定] をクリックします。
[コード生成] ペインを選択し、[システム ターゲット ファイル] を
ert.tlc
に設定します。[レポート] ペインで、[コード生成レポートを作成] を選択します。
メモ
[コード配置] ペインで、[ファイル パッケージ化形式] ドロップダウン リストから
[コンパクト]
オプションを選択した場合、model_types.h
ファイルは生成されず、model_types.h
ファイルの内容はmodel.h
ファイルに移動されます。[コード生成] ペインを選択し、[カスタム ストレージ クラスを無視する] と [適用] をオフにします。
モデルでバリアントの選択 (Variant Subsystem、Variant Source、Variant Sink または Variant Model) を含むブロックを右クリックして [ブロック パラメーター] を選択します。
[バリアント制御モード] パラメーターに
[式]
(既定のオプション) が選択されていることを確認してください。[バリアントのアクティベーションのタイミング] リストから
[コードのコンパイル]
を選択します。Simulink はブロック線図の更新中またはシミュレーション中にバリアントの選択をすべて解析します。この解析によって、バリアントのすべての選択についてコード生成の準備状態の早期検証が行われます。
モデルを作成します。
関連する例
- Compile Code Conditionally for Variations of Component Represented Using Variant Block (Simulink Coder)
- Run Executables for Variant Blocks Without Recompiling Code for Changing Active Choices Using Startup Activation Time (Simulink Coder)
- Generate Code from Nested Variant Subsystem with Code Compile and Startup Activation
詳細
- Generate Code for Variant Source and Variant Sink Blocks (Simulink Coder)
- Generate Code for Variant Subsystem Blocks (Simulink Coder)
- AUTOSAR バリアントのモデル化 (AUTOSAR Blockset)
- Variant System Design