Оптимизируйте сгенерированный код путем упаковки булевых данных в битовые поля

В этом примере показано, как оптимизировать сгенерированный код путем упаковки булевых данных в битовые поля. Когда вы выбираете булевы данные Пакета параметра конфигурации модели в битовые поля, Embedded Coder® упаковывает булевы сигналы в 1-битные битовые поля, уменьшая потребление RAM. По умолчанию оптимизация включена. Эта оптимизация уменьшает потребление RAM. Следует иметь в виду, что эта оптимизация может потенциально увеличить скорость выполнения и размер кода.

Модель в качестве примера

Рассмотрите модель rtwdemo_pack_boolean.

model = 'rtwdemo_pack_boolean';
open_system(model);

Отключите оптимизацию

  1. Откройте диалоговое окно Configuration Parameters.

  2. На Оптимизации> Сигналы и панель Параметров, очистите булевы данные Пакета в битовые поля.

В качестве альтернативы можно использовать API командной строки, чтобы отключить оптимизацию:

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

Создайте временную папку (в вашей системе временная папка) для сборки и инспекционного процесса.

currentDir = pwd;
[~,cgDir] = rtwdemodir();

Сгенерируйте код без оптимизации

Создайте модель с помощью Embedded Coder®.

rtwbuild(model)
### Starting build procedure for: rtwdemo_pack_boolean
### Successful completion of build procedure for: rtwdemo_pack_boolean

Build Summary

Top model targets built:

Model                 Action                       Rebuild Reason                                    
=====================================================================================================
rtwdemo_pack_boolean  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 9.5877s

Просмотрите сгенерированный код без оптимизации. Эти строки кода находятся в rtwdemo_pack_boolean.h.

hfile = fullfile(cgDir,'rtwdemo_pack_boolean_ert_rtw','rtwdemo_pack_boolean.h');
rtwdemodbtype(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. Откройте диалоговое окно Configuration Parameters.

  2. На Оптимизации> Сигналы и панель Параметров, выберите Pack Boolean data в битовые поля.

В качестве альтернативы можно использовать API командной строки, чтобы включить оптимизацию:

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

Сгенерируйте код с оптимизацией

Создайте модель с помощью Embedded Coder®.

rtwbuild(model)
### Starting build procedure for: rtwdemo_pack_boolean
### Successful completion of build procedure for: rtwdemo_pack_boolean

Build Summary

Top model targets built:

Model                 Action                       Rebuild Reason                   
====================================================================================
rtwdemo_pack_boolean  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 9.1745s

Просмотрите сгенерированный код с оптимизацией. Эти строки кода находятся в rtwdemo_pack_boolean.h.

hfile = fullfile(cgDir,'rtwdemo_pack_boolean_ert_rtw','rtwdemo_pack_boolean.h');
rtwdemodbtype(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;

Выбор Pack Boolean data в битовые поля включает спецификатор типа оператора объявления Битового поля параметра конфигурации модели. Чтобы оптимизировать ваш код далее, выберите uchar_t. Однако преимущество оптимизации установки спецификатора типа оператора объявления Битового поля зависит от вашего выбора цели.

Закройте отчет генерации кода и модель.

bdclose(model)
rtwdemoclean;
cd(currentDir)

Смотрите также

Похожие темы