メインコンテンツ

Assignment ブロックおよび Bus Assignment ブロックの更新でインプレース更新を実行する

Bus Assignment ブロックと Assignment ブロックの入力変数と出力変数を再利用

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

説明

[Assignment ブロックおよび Bus Assignment ブロックの更新でインプレース更新を実行する] パラメーターは、可能な場合は Bus Assignment ブロックと Assignment ブロックの入力変数と出力変数を再利用するようにコード ジェネレーターに指示します。

依存関係

このパラメーターは [信号ストレージの再利用] パラメーターを選択すると有効になります。

設定

on (既定値) | off
オン

Embedded Coder® は、可能な場合は Bus Assignment ブロックと Assignment ブロックの入力変数と出力変数を再利用します。これらの変数を再利用すると、データ コピーが減り、RAM の消費が抑えられ、コード実行速度が上がります。

オフ

Embedded Coder は、Bus Assignment ブロックと Assignment ブロックの入力変数と出力変数を再利用しません。

すべて展開する

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

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

Model containing 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 に直接代入します。

推奨設定

アプリケーション設定
デバッグ影響なし
トレーサビリティ影響なし
効率性オン
安全対策

推奨なし

プログラムでの使用

パラメーター: BusAssignmentInplaceUpdate
型: 文字ベクトル
値: 'on' | 'off'
既定の設定: 'on'

バージョン履歴

R2017a で導入