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

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

Пример модели

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

model = 'rtwdemo_pack_boolean';
open_system(model);

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

  1. Откройте диалоговое окно Параметры конфигурации.

  2. На панели Оптимизации очистите «Упаковать логические данные в битовые поля».

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

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

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

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

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

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

slbuild(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 7.8233s

Просмотрите сгенерированный код без оптимизации. Эти строки кода находятся в 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. Откройте диалоговое окно Параметры конфигурации.

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

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

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

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

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

slbuild(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 8.4724s

Просмотрите сгенерированный код с оптимизацией. Эти строки кода находятся в 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 данных в битовые поля включает параметр конфигурации модели Bitfield спецификатор. Чтобы оптимизировать код дальше, выберите uchar_t. Однако преимущество оптимизации настройки спецификатора типа декларатора Битфилда зависит от вашего выбора цели.

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

bdclose(model)
rtwdemoclean;
cd(currentDir)

См. также

Похожие темы