このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
インライン不変信号
[最適化] ペインの [インライン不変信号] を選択して、生成コードを最適化できます。生成コードはシンボリック名ではなく不変信号の数値を使用します。
不変信号はブロックの出力信号のなかで、Simulink® シミュレーション中に変化しない信号のことです。たとえば、信号 S3
は不変信号です。"不変信号" は "不変定数" と同じではないことに注意してください。2 個の定数 (1 と 2) およびゲイン値 3 が不変定数です。不変定数をインライン化するには、[既定のパラメーター動作] を [インライン]
に設定します。
インライン不変信号を使用した生成コードの最適化
この例では、インライン不変信号を使用して生成コードを最適化する方法を示します。この最適化により不変信号のシンボリック名が定数値に変換されます。
InlineInvariantSignals
の最適化により、以下が実現されます。
ROM と RAM の消費を低減する。
実行速度が向上する。
モデル例
モデル rtwdemo_inline_invariant_signals
を考えます。
model = 'rtwdemo_inline_invariant_signals';
open_system(model);
コードの生成
ビルドと検査プロセス用に一時フォルダー (システムの一時フォルダー内) を作成します。
currentDir = pwd; [~,cgDir] = rtwdemodir();
Simulink Coder を使用してモデルをビルドします。
slbuild(model)
### Starting build procedure for: rtwdemo_inline_invariant_signals ### Successful completion of build procedure for: rtwdemo_inline_invariant_signals Build Summary Top model targets built: Model Action Rebuild Reason ================================================================================================================= rtwdemo_inline_invariant_signals 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 19.322s
最適化を行わない生成コードを表示します。以下のコード行は rtwdemo_inline_invariant_signals.c
にあります。
cfile = fullfile(cgDir,'rtwdemo_inline_invariant_signals_grt_rtw',... 'rtwdemo_inline_invariant_signals.c'); rtwdemodbtype(cfile,'/* Output and update for atomic system',... '/* Model output', 1, 0);
/* Output and update for atomic system: '<Root>/InlinedConstFcn' */ void rtwdemo_inline__InlinedConstFcn(int32_T rtu_In1, B_InlinedConstFcn_rtwdemo_inl_T *localB, const ConstB_InlinedConstFcn_rtwdem_T *localC) { /* Product: '<S1>/Product' */ localB->Product = rtu_In1 * localC->Sum_p; }
最適化の有効化
[コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。
[最適化] ペインで、[インライン不変信号] を選択します。
代わりに、コマンド ライン API を使用して最適化を有効にできます。
set_param(model, 'InlineInvariantSignals', 'on');
最適化を使用したコードの生成
生成コードは追加の構造体 (rtwdemo_inline_invariant_ConstB) を作成するのではなく、畳み込まれた定数の数値を使用します。
Simulink Coder を使用してモデルをビルドします。
slbuild(model)
### Starting build procedure for: rtwdemo_inline_invariant_signals ### Successful completion of build procedure for: rtwdemo_inline_invariant_signals Build Summary Top model targets built: Model Action Rebuild Reason ================================================================================================ rtwdemo_inline_invariant_signals 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 7.279s
最適化を行った生成コードを表示します。以下のコード行は rtwdemo_minmax.c
にあります。
rtwdemodbtype(cfile,... '/* Output and update for atomic system', '/* Model output', 1, 0);
/* Output and update for atomic system: '<Root>/InlinedConstFcn' */ void rtwdemo_inline__InlinedConstFcn(int32_T rtu_In1, B_InlinedConstFcn_rtwdemo_inl_T *localB) { /* Product: '<S1>/Product' */ localB->Product = rtu_In1 << 5; }
モデルおよびコード生成レポートを閉じます。
bdclose(model) rtwdemoclean; cd(currentDir)