このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
コードの再利用のための共有定数パラメーター
次のいずれかの条件に該当する場合には、モデル間で定数パラメーターとして生成されたコードを共有できます。
モデル参照階層で定数パラメーターが共有されている。
モデル コンフィギュレーション パラメーター [共有コードの配置] が
[共有場所]に設定されている。
共有定数を生成せずにモデル コンフィギュレーション パラメーター [共有コードの配置] が [共有場所] に設定されている場合、パラメーター GenerateSharedConstants を off に設定します。たとえば、現在のモデルに対する共有定数をオフにするには、コマンド ウィンドウで以下のように入力します。
set_param(gcs,'GenerateSharedConstants','off');
GenerateSharedConstants が off に設定されている場合、コード ジェネレーターは、slprj/target/_sharedutils フォルダー内の const_params.c ファイル以外の共有場所にモデル参照階層モデル化で共有される定数パラメーターを生成します。コード ジェネレーターは、再利用可能ライブラリ サブシステム ファイルで個々の定数パラメーターを個別に定義します。モデル コンフィギュレーション パラメーター GenerateSharedConstants が on に設定されている場合、コード ジェネレーターは共有定数パラメーターを個別に生成し、それらをファイル const_params.c に配置します。コード ジェネレーターはそのファイルを共有ユーティリティ フォルダー slprj/ に配置します。target/_sharedutils
たとえば、ある定数がモデル参照階層内部の複数の場所で使用されており、最上位モデルの名前が topmod であるとすると、共有定数のコードは次のようになります。
共有ユーティリティ フォルダー
slprj/grt/_sharedutilsには、定数パラメーターがconst_params.cに定義され、rtCP_pooled_の末尾に一意のチェックサムが追加された名前が付けられます。extern const real_T rtCP_pooled_lfcjjmohiecj[7]; const real_T rtCP_pooled_lfcjjmohiecj[7] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0 }; extern const real_T rtCP_pooled_ppphohdbfcba[7]; const real_T rtCP_pooled_ppphohdbfcba[7] = { 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0 };top_model_private.hまたは参照モデルref_model_private.hの中では、可読性が向上するように、定数の名前は次のように変更されています。extern const real_T rtCP_pooled_lfcjjmohiecj[7]; extern const real_T rtCP_pooled_ppphohdbfcba[7]; #define rtCP_Constant_Value rtCP_pooled_lfcjjmohiecj /* Expression: [1 2 3 4 5 6 7] * Referenced by: '<Root>/Constant'*/ #define rtCP_Gain_Gain rtCP_pooled_ppphohdbfcba /* Expression: [7 6 5 4 3 2 1] * Referenced by: '<Root>/Gain' */topmod.cまたはrefmod.cでは、呼び出しサイトは次のように記述されます。for (i = 0; i < 7; i++) { topmod_Y.Out1[i] = (topmod_U.In1 + rtCP_Constant_Value[i]) * rtCP_Gain_Gain[i]; }
コード ジェネレーターは、定数を個別の定数として共有ユーティリティ フォルダーの const_params.c ファイルに生成しようと試みます。モデルにコード ジェネレーターが直接インライン化できないパラメーター (たとえば、配列パラメーター) が含まれている場合、コードはデータを表す構造体型を定義します。この構造体は const ストレージ型修飾子を使用するため、一部のツールチェーンはアセンブリ コードをさらに最適化できます。
構造体の宣言 ConstParam_ は、次のように model に配置されます。model.h
生成コードでの共有定数の抑制
コード ジェネレーターが共有定数および共有関数を作成するかどうかを選択できます。コードとデータをサブシステム間で分離できるようにしておく場合や、コードの生成中に定数の共有によりメモリ不足が発生する場合があります。
この設定を、set_param と get_param でパラメーター GenerateSharedConstants を使用してプログラムで変更できます。
次の例では、GenerateSharedConstants を on に設定すると、コード ジェネレーターは定数値を _sharedutils フォルダーの const_params.c ファイルで定義します。GenerateSharedConstants を off に設定すると、コード ジェネレーターは定数値を model_grt_rtw フォルダーの model_data.c ファイルにある非共有領域で定義します。
モデル ThrottleControl を開きます。
open_system('ThrottleControl')

モデル コンフィギュレーション パラメーター [共有コードの配置] が Shared location に設定されていることを確認します。パラメーターが Auto に設定されると、コード ジェネレーターは設定 GenerateSharedConstants を無視します。パラメーターの値を設定しようとすると、エラー メッセージが表示されます。既定では、値 GenerateSharedConstants が選択されます。
コマンド ウィンドウで、GenerateSharedConstants を on に設定します。
set_param('ThrottleControl','GenerateSharedConstants','on')共有定数の定義をフォルダー slprg/grt/_sharedutils のファイル const_param.c で確認します。
extern const real_T rtCP_pooled_H4eTKtECwveN[9];
const real_T rtCP_pooled_H4eTKtECwveN[9] = { 1.0, 0.75, 0.6, 0.0, 0.0, 0.0, 0.6,
0.75, 1.0 } ; extern const real_T rtCP_pooled_SghuHxKVKGHD[9];
const real_T rtCP_pooled_SghuHxKVKGHD[9] = { -1.0, -0.5, -0.25, -0.05, 0.0, 0.05,
0.25, 0.5, 1.0 } ; extern const real_T rtCP_pooled_WqWb2t17NA2R[7];
const real_T rtCP_pooled_WqWb2t17NA2R[7] = { -1.0, -0.25, -0.01, 0.0, 0.01, 0.25,
1.0 } ; extern const real_T rtCP_pooled_Ygnal0wM3c14[7];
const real_T rtCP_pooled_Ygnal0wM3c14[7] = { 1.0, 0.25, 0.0, 0.0, 0.0, 0.25, 1.0
} ;コマンド ウィンドウで、GenerateSharedConstants を off に設定します。
set_param('ThrottleControl','GenerateSharedConstants','off')共有されない定数をフォルダー ThrottleControl_grt_rtw のファイル ThrottleControl_data.c で確認できます。
/* Constant parameters (auto storage) */
const ConstP_rtwdemo_throttlecntrl_T rtwdemo_throttlecntrl_ConstP = {
/* Pooled Parameter (Expression: P_OutMap)
* Referenced by:
* '<S2>/Proportional Gain Shape'
* '<S3>/Proportional Gain Shape'
*/
{ 1.0, 0.25, 0.0, 0.0, 0.0, 0.25, 1.0 }, /* Pooled Parameter (Expression: P_InErrMap)
* Referenced by:
* '<S2>/Proportional Gain Shape'
* '<S3>/Proportional Gain Shape'
*/
{ -1.0, -0.25, -0.01, 0.0, 0.01, 0.25, 1.0 }, /* Pooled Parameter (Expression: I_OutMap)
* Referenced by:
* '<S2>/Integral Gain Shape'
* '<S3>/Integral Gain Shape'
*/
{ 1.0, 0.75, 0.6, 0.0, 0.0, 0.0, 0.6, 0.75, 1.0 }, /* Pooled Parameter (Expression: I_InErrMap)
* Referenced by:
* '<S2>/Integral Gain Shape'
* '<S3>/Integral Gain Shape'
*/
{ -1.0, -0.5, -0.25, -0.05, 0.0, 0.05, 0.25, 0.5, 1.0 }
};共有定数パラメーターの制限
次の場合、コード ジェネレーターはモデルに対して共有定数を生成しません。
モデルには、データ整列に指定されたコード置換ライブラリ (CRL) があります。
GenerateSharedConstantsパラメーターはoffに設定されます。定数には、
[MemVolatile]、[MemConstVolatile]、カスタム メモリ セクションなど、既定の[なし]以外の [メモリ セクション] 設定があります。この場合、コード ジェネレーターはGenerateSharedConstantsパラメーターをオーバーライドし、定数をファイルに配置します。model_data.c
次の場合には、個別の定数は共有されません。
定数がインラインでない S-Function によって参照されている。
定数の型がユーザー定義型で、[データ スコープ] が
[エクスポート]に設定されていない。
参考
トピック
- サブシステムからの再呼び出し可能なコードの生成 (Embedded Coder)
- モデル間で共有されるライブラリ サブシステムからの再利用可能なコードの生成