Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

インライン不変信号

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

不変信号はブロックの出力信号のなかで、Simulink® シミュレーション中に変化しない信号のことです。たとえば、信号 S3 は不変信号です。"不変信号" は "不変定数" と同じではないことに注意してください。2 個の定数 (1 と 2) およびゲイン値 3 が不変定数です。不変定数をインライン化するには、[既定のパラメーター動作][インライン] に設定します。

インライン不変信号を使用した生成コードの最適化

この例では、インライン不変信号を使用して生成コードを最適化する方法を示します。この最適化により不変信号のシンボリック名が定数値に変換されます。

InlineInvariantSignals の最適化により、以下が実現されます。

  • ROM と RAM の消費を低減する。

  • 実行速度が向上する。

モデル例

モデル InvariantSignalsInline について見ていきます。

model = 'InvariantSignalsInline';
open_system(model);

コードの生成

Simulink® Coder™ を使用してモデルをビルドします。

slbuild(model)
### Starting build procedure for: InvariantSignalsInline
### Successful completion of build procedure for: InvariantSignalsInline

Build Summary

Top model targets built:

Model                   Action                        Rebuild Reason                                    
========================================================================================================
InvariantSignalsInline  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 16.882s

最適化を行わない生成コードを表示します。以下のコード行は InvariantSignalsInline.c にあります。

cfile = fullfile('InvariantSignalsInline_grt_rtw',...
    'InvariantSignalsInline.c');
coder.example.extractLines(cfile,'/* Output and update for atomic system',...
    '/* Model output', 1, 0);
/* Output and update for atomic system: '<Root>/InlinedConstFcn' */
void InvariantSignal_InlinedConstFcn(int32_T rtu_In1,
  B_InlinedConstFcn_InvariantSi_T *localB, const ConstB_InlinedConstFcn_Invari_T
  *localC)
{
  /* Product: '<S1>/Product' */
  localB->Product = rtu_In1 * localC->Sum_p;
}

最適化の有効化

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

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

代わりに、コマンド ライン API を使用して最適化を有効にできます。

set_param(model, 'InlineInvariantSignals', 'on');

最適化を使用したコードの生成

生成コードは追加の構造体を作成せずに、畳み込まれた定数の数値を使用します。

Simulink Coder を使用してモデルをビルドします。

slbuild(model)
### Starting build procedure for: InvariantSignalsInline
### Successful completion of build procedure for: InvariantSignalsInline

Build Summary

Top model targets built:

Model                   Action                        Rebuild Reason                   
=======================================================================================
InvariantSignalsInline  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 12.483s

最適化を行った InvariantSignalsInline.c の生成コードを表示します。

coder.example.extractLines(cfile,...
    '/* Output and update for atomic system', '/* Model output', 1, 0);
/* Output and update for atomic system: '<Root>/InlinedConstFcn' */
void InvariantSignal_InlinedConstFcn(int32_T rtu_In1,
  B_InlinedConstFcn_InvariantSi_T *localB)
{
  /* Product: '<S1>/Product' */
  localB->Product = rtu_In1 << 5;
}

モデルおよびコード生成レポートを閉じます。

bdclose(model)

参考

関連するトピック