exponenta event banner

Запретить создание кода для неиспользуемых путей выполнения

Если переменная управляет потоком: if, elseif, else оператор или switch, case, otherwise объявите его константой, чтобы генерация кода происходила только для одной ветви оператора.

В зависимости от природы переменной control-flow ее можно объявить постоянной двумя способами:

Предотвращение создания кода при использовании локальных переменных

  1. Определение функции SquareOrCube которая принимает входную переменную, inи квадратов или кубов его элементов на основе того, является ли переменная выбора, ch, имеет значение s или c:

    function out = SquareOrCube(ch,in) %#codegen
     if ch=='s'
         out = in.^2;
     elseif ch=='c'
         out = in.^3;
     else 
         out = 0;
     end
  2. Создать код для SquareOrCube с использованием codegen команда:

    codegen -config:lib SquareOrCube -args {'s',zeros(2,2)}

    Произведенные C кодируют площади или кубы элементы матрицы 2 на 2 на основе входа для ch.

  3. Добавить следующую строку в определение SquareOrCube:

    ch = 's';

    Сгенерированный код C выполняет возведение в квадрат элементов матрицы 2 на 2. Переменная выбора, ch, и другие ветви if/elseif/if оператор не отображается в созданном коде.

Предотвращение генерации кода при управлении потоком входных переменных

  1. Определение функции MathFunc, которая выполняет различные математические операции на входе, in, в зависимости от значения входного сигнала, flag:

    function out = MathFunc(flag,in) %#codegen
      %# codegen
       switch flag
         case 1
            out=sin(in);
         case 2
            out=cos(in);
         otherwise
            out=sqrt(in);
       end
  2. Создать код для MathFunc с использованием codegen команда:

    codegen -config:lib MathFunc -args {1,zeros(2,2)}

    Сгенерированный код C выполняет различные математические операции на элементах матрицы 2 на 2 на основе входа для flag.

  3. Создать код для MathFunc, объявляя аргумент, flag, как константа с использованием coder.Constant:

    codegen -config:lib MathFunc -args {coder.Constant(1),zeros(2,2)}

    Сгенерированный код C находит синус элементов матрицы 2 на 2. Переменная, flag, и switch/case/otherwise оператор не отображается в созданном коде.

Связанные темы