最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

生成されたコードからのデッド コード パスの除去

以下の例では、コード ジェネレーターを使用して、デッド (つまり、未使用) コード パスを生成されたコードから除去する方法について示します。この最適化により実行速度が上がり、ROM と RAM の消費量を節約します。

モデル rtwdemo_deadpathElim では、Sum ブロックから出ていく信号は 2 つの個別のコード バスに分割されます。一番上のパスはデッド コード パスではありません。ユーザーが Assertion ブロックを無効にすると、一番下のパスがデッド コード パスになります。

model = 'rtwdemo_deadpathElim';
open_system(model);

有効な Assertion ブロックを使用したコードの生成

  1. Assertion ブロックに対して、ブロック パラメーター ダイアログ ボックスを開きます。

  2. [アサーションを有効にする] ボックスをオンにします。あるいは、コマンド ライン API を使用して Assertion ブロックを有効にします。

set_param([model '/Assert1'], 'Enabled', 'on');

ビルドと検査プロセス用に一時フォルダーを作成します。

currentDir = pwd;
[~,cgDir] = rtwdemodir();

モデルを作成します。

rtwbuild(model)
### Starting build procedure for model: rtwdemo_deadpathElim
### Successful completion of build procedure for model: rtwdemo_deadpathElim

Assertion ブロックが有効になっているため、rtwdemo_deadpathElim.c の以下の行には Gain ブロックおよび Assertion ブロックのコードが含まれます。

cfile = fullfile(cgDir,'rtwdemo_deadpathElim_grt_rtw','rtwdemo_deadpathElim.c');
rtwdemodbtype(cfile,'/* Model step', '/* Model initialize function */', 0, 1);
void rtwdemo_deadpathElim_step(void)
{
  /* Sum: '<Root>/Sum1' incorporates:
   *  Constant: '<Root>/Constant1'
   *  Inport: '<Root>/In1'
   */
  rtwdemo_deadpathElim_Y.Out1 = rtwdemo_deadpathElim_U.In1 + 1.0;

  /* Assertion: '<Root>/Assert1' incorporates:
   *  Gain: '<Root>/G1'
   */
  utAssert(2.0 * rtwdemo_deadpathElim_Y.Out1 != 0.0);
}

無効な Assertion ブロックを使用したコードの生成

Assertion ブロックを無効にしてデッド コードパスを生成します。コード ジェネレーターはデッド コード パスを検出し、生成されたコードからそれを除去します。

  1. Assertion ブロックに対して、ブロック パラメーター ダイアログ ボックスを開きます。

  2. [アサーションを有効にする] ボックスをオフにします。

あるいは、コマンド ライン API を使用して Assertion ブロックを無効にします。

set_param([model '/Assert1'], 'Enabled', 'off');

モデルを作成します。

rtwbuild(model)
### Starting build procedure for model: rtwdemo_deadpathElim
### Successful completion of build procedure for model: rtwdemo_deadpathElim

Assertion ブロックが無効になっているため、rtwdemo_deadpathElim.c の以下の行には Gain ブロックおよび Assertion ブロックのコードは含まれません。

rtwdemodbtype(cfile,'/* Model step', '/* Model initialize function */', 0, 1);
void rtwdemo_deadpathElim_step(void)
{
  /* Outport: '<Root>/Out1' incorporates:
   *  Constant: '<Root>/Constant1'
   *  Inport: '<Root>/In1'
   *  Sum: '<Root>/Sum1'
   */
  rtwdemo_deadpathElim_Y.Out1 = rtwdemo_deadpathElim_U.In1 + 1.0;
}

モデルを閉じてクリーンアップします。

bdclose(model)
rtwdemoclean;
cd(currentDir)

コード ジェネレーターを使用して、デッド コード パスを生成されたコードから除去する方法の別の例については、rtwdemo_deadpath を参照してください。

関連するトピック