В этом примере показано, как оптимизировать сгенерированный код путем управления типом оператора в коде. Можно сгенерировать код с Побитовыми или Логическими операторами или комбинацией обоих для входных параметров с булевым типом данных. Выбор побитовых операторов в коде может повысить эффективность ROM, когда код содержит побитовые операторы.
Когда вы выбираете значение для Оператора, чтобы представлять параметр блоков Побитового и Логического оператора, сгенерированный код обеспечивает операторы, как смоделировано или преобразует все операторы или в побитовые или в логические операторы, независимые от блоков моделирования.
ПРИМЕЧАНИЕ: Этот пример требует Embedded Coder®.
В модели matlab:logicalandbitwise, блок Logical AND соединяется с блоком Bitwise AND.
model = 'logicalandbitwise';
open_system(model);
Используйте свою систему временная папка в создании и инспекционном процессе.
currentDir = pwd;
Откройте диалоговое окно Configuration Parameters.
На панели Оптимизации, устанавливает Оператор, чтобы представлять параметр блоков Побитового и Логического оператора Same as modeled
.
В качестве альтернативы используйте API командной строки, чтобы установить значение параметров:
set_param(model, 'BitwiseOrLogicalOp', 'Same as modeled'); evalc('rtwbuild(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 и блок Bitwsie AND в коде.
Откройте диалоговое окно Configuration Parameters.
На панели Оптимизации, устанавливает Оператор, чтобы представлять параметр блоков Побитового и Логического оператора Logical operator
.
В качестве альтернативы используйте API командной строки, чтобы установить значение параметров:
set_param(model, 'BitwiseOrLogicalOp', 'Logical operator'); evalc('rtwbuild(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 в модели преобразован в логический &&
оператор в коде.
Откройте диалоговое окно Configuration Parameters.
На панели Оптимизации, устанавливает Оператор, чтобы представлять параметр блоков Побитового и Логического оператора Bitwise operator
.
В качестве альтернативы используйте API командной строки, чтобы установить значение параметров:
set_param(model, 'BitwiseOrLogicalOp', 'Bitwise operator'); evalc('rtwbuild(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)
Оператор, чтобы представлять блоки Побитового и Логического оператора | Инструменты оптимизации и методы