В этом примере показано, как оптимизировать сгенерированный код путем упаковки булевых данных в битовые поля. Когда вы выбираете параметр конфигурации модели Пакет логических данных в битовые поля, Embedded Coder ® упаковывает логические сигналы в 1-битные битовые поля, уменьшая потребление ОЗУ. По умолчанию оптимизация включена. Эта оптимизация снижает потребление ОЗУ. Имейте в виду, что эта оптимизация потенциально может увеличить размер кода и скорость выполнения.
Рассмотрим rtwdemo_pack_boolean модели.
model = 'rtwdemo_pack_boolean';
open_system(model);
Откройте диалоговое окно Параметры конфигурации.
На панели Оптимизации очистите «Упаковать логические данные в битовые поля».
Также можно использовать 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;
Откройте диалоговое окно Параметры конфигурации.
На панели Оптимизация выберите Упаковать логические данные в битовые поля.
Также можно использовать 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)
Упакуйте логические данные в битовые поля