メインコンテンツ

boolean データをビットフィールドにパッキングすることによる生成コードの最適化

この例では、boolean データをビットフィールドにパッキングして生成コードを最適化する方法を説明します。モデル コンフィギュレーション パラメーター [boolean データをビットフィールドにパッキング] を選択すると、Embedded Coder® は boolean 信号を 1 ビット ビットフィールドにパッキングし、RAM の消費を低減します。既定では、最適化は有効になっています。この最適化により、RAM の消費が低減されます。この最適化によってコード サイズと実行時間が増加する可能性があることに注意してください。

モデル例

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

model = 'PackBooleanData';
open_system(model);

最適化の無効化

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

  2. [最適化] ペインで、[boolean データをビットフィールドにパッキング] をオフにします。

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

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

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

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

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

Build Summary

Top model targets:

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

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

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

hfile = fullfile('PackBooleanData_ert_rtw','PackBooleanData.h');
coder.example.extractLines(hfile,'/* Block signals and states','/* External inputs',1,0);
/* Block signals and states (default storage) for system '<Root>' */
typedef struct {
  boolean_T LogicalOp1;                /* '<Root>/Logical Op1' */
  boolean_T LogicalOp2;                /* '<Root>/Logical Op2' */
  boolean_T LogicalOp5;                /* '<Root>/Logical Op5' */
  boolean_T LogicalOp3;                /* '<Root>/Logical Op3' */
  boolean_T LogicalOp4;                /* '<Root>/Logical Op4' */
  boolean_T RelationalOperator;        /* '<Root>/Relational Operator' */
  boolean_T UnitDelay_DSTATE;          /* '<Root>/Unit Delay' */
} DW;

最適化の有効化

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

  2. [最適化] ペインで、[boolean データをビットフィールドにパッキング] をオンにします。

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

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

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

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

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

Build Summary

Top model targets:

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

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

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

hfile = fullfile('PackBooleanData_ert_rtw','PackBooleanData.h');
coder.example.extractLines(hfile,'/* Block signals and states','/* External inputs',1,0);
/* Block signals and states (default storage) for system '<Root>' */
typedef struct {
  struct {
    uint_T LogicalOp1 : 1;             /* '<Root>/Logical Op1' */
    uint_T LogicalOp2 : 1;             /* '<Root>/Logical Op2' */
    uint_T LogicalOp5 : 1;             /* '<Root>/Logical Op5' */
    uint_T LogicalOp3 : 1;             /* '<Root>/Logical Op3' */
    uint_T LogicalOp4 : 1;             /* '<Root>/Logical Op4' */
    uint_T RelationalOperator : 1;     /* '<Root>/Relational Operator' */
    uint_T UnitDelay_DSTATE : 1;       /* '<Root>/Unit Delay' */
  } bitsForTID0;
} DW;

[boolean データをビットフィールドにパッキング] をオンにすると、モデル コンフィギュレーション パラメーター [ビットフィールド宣言子の型指定子] が有効になります。コードをさらに最適化するには、uchar_t を選択します。ただし、[ビットフィールド宣言子の型指定子] 設定の最適化の利点は、ターゲットの選択によって異なります。

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

bdclose(model)

参考

トピック