Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

インライン不変信号

[最適化] ペインの [インライン不変信号] を選択して、生成コードを最適化できます。生成コードはシンボリック名ではなく不変信号の数値を使用します。

不変信号はブロックの出力信号のなかで、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 14.967s

最適化を行わない生成コードを表示します。以下のコード行は 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;
}

最適化の有効化

  1. [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。

  2. [最適化] ペインで、[インライン不変信号] を選択します。

代わりに、コマンド ライン 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 10.858s

最適化を行った生成コードを表示します。以下のコード行は 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)

参考

関連するトピック