このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
生成されたコードからのデッド コード パスの除去
以下の例では、コード ジェネレーターを使用して、デッド (つまり、未使用) コード パスを生成されたコードから除去する方法について示します。この最適化により実行速度が上がり、ROM と RAM の消費量を節約します。
例
モデル rtwdemo_deadpathElim では、Sum ブロックから出ていく信号は 2 つの個別のコード バスに分割されます。一番上のパスはデッド コード パスではありません。ユーザーが Assertion ブロックを無効にすると、一番下のパスがデッド コード パスになります。
model = 'rtwdemo_deadpathElim';
open_system(model);
有効な Assertion ブロックを使用したコードの生成
Assertion ブロックに対して、ブロック パラメーター ダイアログ ボックスを開きます。
[アサーションを有効にする] ボックスをオンにします。あるいは、コマンド ライン API を使用して Assertion ブロックを有効にします。
set_param([model '/Assert1'], 'Enabled', 'on');
ビルドと検査プロセス用に一時フォルダーを作成します。
currentDir = pwd; [~,cgDir] = rtwdemodir();
モデルを作成します。
slbuild(model)
### Starting build procedure for: rtwdemo_deadpathElim ### Successful completion of build procedure for: rtwdemo_deadpathElim Build Summary Top model targets built: Model Action Rebuild Reason ===================================================================================================== rtwdemo_deadpathElim Code generated and compiled Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 14.828s
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 ブロックを無効にしてデッド コードパスを生成します。コード ジェネレーターはデッド コード パスを検出し、生成されたコードからそれを除去します。
Assertion ブロックに対して、ブロック パラメーター ダイアログ ボックスを開きます。
[アサーションを有効にする] ボックスをオフにします。
あるいは、コマンド ライン API を使用して Assertion ブロックを無効にします。
set_param([model '/Assert1'], 'Enabled', 'off');
モデルを作成します。
slbuild(model)
### Starting build procedure for: rtwdemo_deadpathElim ### Successful completion of build procedure for: rtwdemo_deadpathElim Build Summary Top model targets built: Model Action Rebuild Reason ==================================================================================== rtwdemo_deadpathElim Code generated and compiled Generated code was out of date. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 10.104s
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 を参照してください。