Управляйте типом оператора в сгенерированном коде

В этом примере показано, как оптимизировать сгенерированный код путем управления типом оператора в коде. Можно сгенерировать код с Побитовыми или Логическими операторами или комбинацией обоих для входных параметров с булевым типом данных. Выбор побитовых операторов в коде может повысить эффективность ROM, когда код содержит побитовые операторы.

Когда вы выбираете значение для Оператора, чтобы представлять параметр блоков Побитового и Логического оператора, сгенерированный код обеспечивает операторы, как смоделировано или преобразует все операторы или в побитовые или в логические операторы, независимые от блоков моделирования.

ПРИМЕЧАНИЕ: Этот пример требует Embedded Coder®.

Модель в качестве примера

В модели matlab:logicalandbitwise, блок Logical AND соединяется с блоком Bitwise AND.

model = 'logicalandbitwise';
open_system(model);

Сгенерируйте Код, как смоделировано

Используйте свою систему временная папка для создания и инспекционного процесса.

currentDir = pwd;
  1. Откройте диалоговое окно Configuration Parameters.

  2. На панели Оптимизации, устанавливает Оператор, чтобы представлять параметр блоков Побитового и Логического оператора 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 и блок Bitwise AND в коде.

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

  1. Откройте диалоговое окно Configuration Parameters.

  2. На панели Оптимизации, устанавливает Оператор, чтобы представлять параметр блоков Побитового и Логического оператора 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 в модели преобразован в логический && оператор в коде.

Сгенерируйте код с побитовыми операторами

  1. Откройте диалоговое окно Configuration Parameters.

  2. На панели Оптимизации, устанавливает Оператор, чтобы представлять параметр блоков Побитового и Логического оператора 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)

Смотрите также

|