メインコンテンツ

float と double を 0.0 に初期化するために memset を使用

浮動小数点データを 0.0 に明示的に初期化するコードの生成を制御する

モデル コンフィギュレーション ペイン: [コード生成] / [最適化]

説明

[float と double を 0.0 に初期化するために memset を使用] パラメーターは、浮動小数点データを 0.0 に明示的に初期化するコードを生成するかどうかを指定します。

設定

On (GUI)'off' (コマンド ライン) (既定値) | off (GUI)'on' (コマンド ライン)
オン

memset を使用して、型に関係なく浮動小数点データの内部ストレージを整数ビット パターン 0 (すべてのビットが 0) にクリアします。コンパイラとターゲットの CPU のどちらも整数ビット パターン 0 によって浮動小数点ゼロを表している場合、実行および ROM の効率性を向上させるためにこのパラメーターを使用します。

このパラメーターを使用するには、コンフィギュレーション パラメーター [memcpy しきい値] をオンにして memset 機能を有効にする必要があります。しきい値が十分に大きい値に設定されていることを確認してください。

オフ

float 型および double 型のデータのストレージを 0.0 に明示的に初期化するコードを生成します。結果として生成されるコードは、オプションを選択した場合に生成されるコードよりも若干効率性が劣ります。

メモ

コマンド ラインの値は、設定の値の逆です。したがって、コマンド ラインの 'on' は、設定セクションでの "オフ" の記述に対応します。コマンド ラインの 'off' は、設定セクションでの "オン" の記述に対応します。

すべて展開する

この例では、関数 memset を使用して内部ストレージをクリアすることで生成コードを最適化する方法を示します。

モデル例

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

model = 'MemsetOptimization';
open_system(model);

コードの生成

コード ジェネレーターはループを使用して Constant ブロックの値を初期化します。モデルをビルドします。

slbuild(model)
### Searching for referenced models in model 'MemsetOptimization'.
### Total of 1 models to build.
### Starting build procedure for: MemsetOptimization
### Successful completion of build procedure for: MemsetOptimization

Build Summary

Top model targets:

Model               Build Reason                                         Status                        Build Duration
=====================================================================================================================
MemsetOptimization  Information cache folder or artifacts were missing.  Code generated and compiled.  0h 0m 6.8691s

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 7.2527s

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

cfile = fullfile('MemsetOptimization_grt_rtw','MemsetOptimization.c');
coder.example.extractLines(cfile,'/* Model initialize function */',...
    '/* Model terminate function */',1,0);
/* Model initialize function */
void MemsetOptimization_initialize(void)
{
  /* Registration code */

  /* initialize error status */
  rtmSetErrorStatus(MemsetOptimization_M, (NULL));

  /* external outputs */
  {
    int32_T i;
    for (i = 0; i < 50; i++) {
      MemsetOptimization_Y.Out1[i] = 0.0;
    }
  }

  {
    int32_T i;

    /* ConstCode for Outport: '<Root>/Out1' */
    for (i = 0; i < 50; i++) {
      MemsetOptimization_Y.Out1[i] = 56.0;
    }

    /* End of ConstCode for Outport: '<Root>/Out1' */
  }
}

最適化の有効化

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

  2. [コンフィギュレーション パラメーター] ダイアログ ボックスで [float と double を 0.0 に初期化するために memset を使用] パラメーターを選択します。代わりに、コマンド ライン API を使用して最適化を有効にできます。

set_param(model,'InitFltsAndDblsToZero','off');

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

コード ジェネレーターは関数 memset を使用して、Constant ブロックの値を初期化します。

モデルをビルドします。

slbuild(model)
### Searching for referenced models in model 'MemsetOptimization'.
### Total of 1 models to build.
### Starting build procedure for: MemsetOptimization
### Successful completion of build procedure for: MemsetOptimization

Build Summary

Top model targets:

Model               Build Reason                     Status                        Build Duration
=================================================================================================
MemsetOptimization  Generated code was out of date.  Code generated and compiled.  0h 0m 3.8318s

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 4.2589s

最適化を行った生成コードを表示します。以下のコード行は MemsetOptimization.c にあります。

coder.example.extractLines(cfile,'/* Model initialize function */',...
    '/* Model terminate function */',1,0);
/* Model initialize function */
void MemsetOptimization_initialize(void)
{
  /* Registration code */

  /* initialize error status */
  rtmSetErrorStatus(MemsetOptimization_M, (NULL));

  /* external outputs */
  (void)memset(&MemsetOptimization_Y, 0, sizeof(ExtY_MemsetOptimization_T));

  {
    int32_T i;

    /* ConstCode for Outport: '<Root>/Out1' */
    for (i = 0; i < 50; i++) {
      MemsetOptimization_Y.Out1[i] = 56.0;
    }

    /* End of ConstCode for Outport: '<Root>/Out1' */
  }
}

推奨設定

アプリケーション設定
デバッグ影響なし
トレーサビリティ影響なし
効率性オン (GUI)、'off' (コマンド ライン) (実行、ROM)、影響なし (RAM)
安全対策影響なし

プログラムでの使用

パラメーター: InitFltsAndDblsToZero
型: 文字ベクトル
値: 'on' | 'off'
既定の設定: 'off'

バージョン履歴

R2006a より前に導入