В этом примере показано, как оптимизировать сгенерированный код путем упаковки булевых данных в битовые поля. Когда вы выбираете булевы данные Пакета параметра конфигурации модели в битовые поля, Embedded Coder® упаковывает булевы сигналы в 1-битные битовые поля, уменьшая потребление RAM. По умолчанию оптимизация включена. Эта оптимизация уменьшает потребление RAM. Следует иметь в виду, что эта оптимизация может потенциально увеличить скорость выполнения и размер кода.
Рассмотрите модель rtwdemo_pack_boolean.
model = 'rtwdemo_pack_boolean';
open_system(model);
Откройте диалоговое окно Configuration Parameters.
На панели Оптимизации очистите булевы данные Пакета в битовые поля.
В качестве альтернативы можно использовать 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;
Откройте диалоговое окно Configuration Parameters.
На панели Оптимизации выберите Pack Boolean data в битовые поля.
В качестве альтернативы можно использовать 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 data в битовые поля включает спецификатор типа оператора объявления Битового поля параметра конфигурации модели. Чтобы оптимизировать ваш код далее, выберите uchar_t
. Однако преимущество оптимизации установки спецификатора типа оператора объявления Битового поля зависит от вашего выбора цели.
Закройте отчет генерации кода и модель.
bdclose(model) rtwdemoclean; cd(currentDir)
Упакуйте булевы данные в битовые поля