メインコンテンツ

再利用可能なサブシステムの出力を渡す

再利用可能なサブシステムによって出力が渡される形式の制御

モデル コンフィギュレーション ペイン: [コード生成] / [最適化]

説明

[再利用可能なサブシステムの出力を渡す] パラメーターは、再利用可能なサブシステムによって出力が渡される形式を指定します。

設定

個々の引数 (既定値) | 構造体参照
個々の引数

再利用可能なサブシステムの各出力引数を、出力引数を含むグローバル メモリの領域へのポインターとしてではなく、ローカルのアドレスとして渡します。このオプションにより、グローバル メモリの使用量が削減され、ローカル変数をコピーしてグローバルなブロック I/O 構造体に戻す処理がなくなります。信号がローカル変数として割り当てられると、スタック サイズが増加する可能性があります。スタック サイズが必要以上に増加する場合は、既定の設定を使用します。既定では、個別に渡される出力引数の最大数は 12 です。引数の数を増やすには、[サブシステム出力に使用する引数の最大数] パラメーターの値を大きくします。

構造体参照

再利用可能なサブシステムの出力を、グローバル メモリに保存されている構造体へのポインターとして渡します。

メモ

可変次元をもつ信号を含む再利用可能なサブシステムには既定のオプションが使用されます。

すべて展開する

Bus Assignment ブロックを含むモデルの場合、可能であれば、コード ジェネレーターはブロックの入力と出力に同じ変数を使用します。これらの変数を再利用すると、データ コピーが減り、RAM の消費が抑えられ、コード実行速度が上がります。

たとえば、bus_assignoptim では、6 つの要素を含むバス信号が Bus Assignment ブロックと Bus Selector ブロックに送られます。Bus Assignment ブロックはバス要素 a1_real_array に新しい値を代入します。このバス信号は Out1 に送られます。

Model that contains several blocks, including a Bus Assignment block.

[Assignment ブロックおよび Bus Assignment ブロックの更新でインプレース更新を実行する] パラメーターを off に設定して、最適化なしでコードを生成します。最適化を行わない場合、bus_assignoptim_step 関数には次のコードが含まれます。

void bus_assignoptim_step(void)
{
  real_T rtb_Assignment[36];
  int32_T i;

  /* Assignment: '<Root>/Assignment' incorporates:
   *  Inport: '<Root>/In1'
   *  Inport: '<Root>/In2'
   *  Product: '<Root>/Product'
   *  Selector: '<Root>/Selector'
   *  Sum: '<Root>/Sum1'
   */
  for (i = 0; i < 36; i++) {
    rtb_Assignment[i] = bus_assignoptim_U.In1.a1_real_array[i];
  }

  for (i = 0; i < 2; i++) {
    rtb_Assignment[(int32_T)(i + 22)] = (bus_assignoptim_U.In1.a1_real_array
      [(int32_T)(i + 22)] + bus_assignoptim_U.In1.a1_num) *
      bus_assignoptim_U.In2;
  }

  /* End of Assignment: '<Root>/Assignment' */

  /* Outport: '<Root>/Out' incorporates:
   *  BusAssignment: '<Root>/Bus Assignment'
   *  Inport: '<Root>/In1'
   */
  bus_assignoptim_Y.Out = bus_assignoptim_U.In1;

  /* BusAssignment: '<Root>/Bus Assignment' incorporates:
   *  Outport: '<Root>/Out'
   */
  for (i = 0; i < 36; i++) {
    bus_assignoptim_Y.Out.a1_real_array[i] = rtb_Assignment[i];
  }
}
生成されたコードには、このデータが bus_assignoptim_Y.Out.a1_real_array に代入される前にデータを保持するための一時配列 rtb_Assignment が含まれています。

[Assignment ブロックおよび Bus Assignment ブロックの更新でインプレース更新を実行する] パラメーターを on に設定して、最適化ありでコードを生成します。最適化を行った場合、bus_assignoptim_step 関数には次のコードが含まれます。

/* Model step function */
void bus_assignoptim_step(void)
{
  int32_T i;

  /* Outport: '<Root>/Out' incorporates:
   *  Inport: '<Root>/In1'
   *  SignalConversion: '<Root>/TmpBusAssignmentBufferAtBus AssignmentInport1'
   */
  bus_assignoptim_Y.Out = bus_assignoptim_U.In1;

  /* Assignment: '<Root>/Assignment' incorporates:
   *  Inport: '<Root>/In1'
   *  Inport: '<Root>/In2'
   *  Outport: '<Root>/Out'
   *  Product: '<Root>/Product'
   *  Selector: '<Root>/Selector'
   *  Sum: '<Root>/Sum1'
   */
  for (i = 0; i < 36; i++) {
    bus_assignoptim_Y.Out.a1_real_array[i] =
      bus_assignoptim_U.In1.a1_real_array[i];
  }

  for (i = 0; i < 2; i++) {
    bus_assignoptim_Y.Out.a1_real_array[(int32_T)(i + 22)] =
      (bus_assignoptim_U.In1.a1_real_array[(int32_T)(i + 22)] +
       bus_assignoptim_U.In1.a1_num) * bus_assignoptim_U.In2;
  }

  /* End of Assignment: '<Root>/Assignment' */
}
生成されたコードには、データを保持するための一時配列 rtb_Assignment1 が含まれていません。生成されたコードはこのデータを bus_assignoptim_Y.Out.a1_real_array に直接代入します。

推奨設定

アプリケーション設定
デバッグ影響なし
トレーサビリティ影響なし
効率性[個々の引数] (実行、RAM)、[構造体参照] (ROM)
安全対策影響なし

プログラムでの使用

パラメーター: PassReuseOutputArgsAs
型: 文字ベクトル
値: 'Structure reference' | 'Individual arguments'
既定: 'Individual arguments'

バージョン履歴

R2009a で導入