exponenta event banner

Тип управляющего оператора в сгенерированном коде

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

При выборе значения параметра Оператор (Operator) для представления параметров блоков Побитовый (Bitwise) и Логический оператор (Logical Operator) созданный код сохраняет операторы как смоделированные или преобразует все операторы в побитовые или логические операторы независимо от блоков моделирования.

ПРИМЕЧАНИе.В этом примере требуется Embedded Coder ®.

Пример модели

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

model = 'logicalandbitwise';
open_system(model);

Создать код как смоделированный

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

currentDir = pwd;
  1. Откройте диалоговое окно «Параметры конфигурации».

  2. На панели «Оптимизация» задайте для параметра Operator значение Bitwise и Logical Operator block значение 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);
}

Созданный код содержит как логический, так и логический код. && оператор и побитовый & оператор, представляющий логический блок И и побитовый блок И в коде.

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

  1. Откройте диалоговое окно «Параметры конфигурации».

  2. На панели «Оптимизация» задайте для параметра Operator значение Bitwise и Logical Operator block значение 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 в модели преобразуется в логический && оператор в коде.

Создание кода с помощью побитовых операторов

  1. Откройте диалоговое окно «Параметры конфигурации».

  2. На панели «Оптимизация» задайте для параметра Operator значение Bitwise и Logical Operator block значение 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)

См. также

|