В этом примере показано, как оптимизировать сгенерированный код путем управления типом оператора в коде. Можно сгенерировать код с помощью Bitwise или Logical операторов или комбинации обоих для входов с логическим типом данных. Выбор побитовых операторов в коде может улучшить эффективность ПЗУ, когда код содержит побитовые операторы.
Когда вы выбираете значение для параметра Operator, чтобы представлять Bitwise и Logical Operator, сгенерированный код поддерживает операторы как смоделированные или преобразует все операторы в побитовые или логические операторы независимо от блоков моделирования.
ПРИМЕЧАНИЕ: В этом примере требуется Embedded Coder ®.
В модели matlab: logicalandbitwise, блок Logical AND соединяется с блоком Bitwise AND.
model = 'logicalandbitwise';
open_system(model);

Используйте временную папку системы для создания и контроля.
currentDir = pwd;
Откройте диалоговое окно Параметры конфигурации.
На панели Оптимизации установите значение параметра Operator, чтобы представлять битовые и логические блоки оператора Same as modeled.
Также используйте API командной строки, чтобы задать значение параметров:
set_param(model, 'BitwiseOrLogicalOp', 'Same as modeled'); evalc('slbuild(model)');
Просмотрите сгенерированный код с операторами в коде, который соответствует смоделированным блокам. Вот фрагмент logicalandbitwise.c.
cfile = fullfile(currentDir,'logicalandbitwise_ert_rtw','logicalandbitwise.c'); rtwdemodbtype(cfile,'/* Model step function ','/* Model initialize function',1, 1);
/* Model step function */
void logicalandbitwise_step(void)
{
/* Outport: '<Root>/Out1' incorporates:
* Inport: '<Root>/Input'
* Inport: '<Root>/Input1'
* Inport: '<Root>/Input2'
* Logic: '<Root>/Logical AND'
* S-Function (sfix_bitop): '<Root>/Bitwise AND'
*/
logicalandbitwise_Y.Out1 = logicalandbitwise_U.Input &
(logicalandbitwise_U.Input1 && logicalandbitwise_U.Input2);
}
Сгенерированный код содержит оба логических && оператор и побитовая & оператор, представляющий блок Logical AND и блок Bitwise AND в коде.
Откройте диалоговое окно Параметры конфигурации.
На панели Оптимизации установите значение параметра Operator, чтобы представлять битовые и логические блоки оператора Logical operator.
Также используйте API командной строки, чтобы задать значение параметров:
set_param(model, 'BitwiseOrLogicalOp', 'Logical operator'); evalc('slbuild(model)');
Просмотрите сгенерированный код только с логическими операторами. Вот фрагмент logicalandbitwise.c.
cfile = fullfile(currentDir,'logicalandbitwise_ert_rtw','logicalandbitwise.c'); rtwdemodbtype(cfile,'/* Model step function ','/* Model initialize function',1, 1);
/* Model step function */
void logicalandbitwise_step(void)
{
/* Outport: '<Root>/Out1' incorporates:
* Inport: '<Root>/Input'
* Inport: '<Root>/Input1'
* Inport: '<Root>/Input2'
* Logic: '<Root>/Logical AND'
* S-Function (sfix_bitop): '<Root>/Bitwise AND'
*/
logicalandbitwise_Y.Out1 = (logicalandbitwise_U.Input &&
(logicalandbitwise_U.Input1 && logicalandbitwise_U.Input2));
}
Сгенерированный код содержит только логический && оператор. Блок Bitwise AND в модели преобразуется в логический && оператор в коде.
Откройте диалоговое окно Параметры конфигурации.
На панели Оптимизации установите значение параметра Operator, чтобы представлять битовые и логические блоки оператора Bitwise operator.
Также используйте API командной строки, чтобы задать значение параметров:
set_param(model, 'BitwiseOrLogicalOp', 'Bitwise operator'); evalc('slbuild(model)');
Просмотрите сгенерированный код только с побитовыми операторами. Вот фрагмент logicalandbitwise.c.
cfile = fullfile(currentDir,'logicalandbitwise_ert_rtw','logicalandbitwise.c'); rtwdemodbtype(cfile,'/* Model step function ','/* Model initialize function',1, 1);
/* Model step function */
void logicalandbitwise_step(void)
{
/* Outport: '<Root>/Out1' incorporates:
* Inport: '<Root>/Input'
* Inport: '<Root>/Input1'
* Inport: '<Root>/Input2'
* Logic: '<Root>/Logical AND'
* S-Function (sfix_bitop): '<Root>/Bitwise AND'
*/
logicalandbitwise_Y.Out1 = logicalandbitwise_U.Input & (boolean_T)
(logicalandbitwise_U.Input1 & logicalandbitwise_U.Input2);
}
Сгенерированный код содержит только побитовые & оператор. Блок Logical AND в модели преобразуется в побитовый & оператор в коде.
Закройте модель и отчет о генерации кода.
bdclose(model) rtwdemoclean; cd(currentDir)
Оператор для представления битовых и логических блоков оператора | Инструменты и методов оптимизации