coder.Constant class

Пакет: coder
Суперклассы: coder.Type

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

Описание

Использование coder.Constant объект для определения входных значений, которые являются постоянными во время генерации кода. Используйте этот объект с codegen -args и -globals опции для задания свойств входных параметров и глобальных переменных, соответственно. Не передайте его как вход в сгенерированную MEX-функцию.

Можно использовать coder.Constant объект вместо coder.Type объект для задания заданного постоянного значения во входной или глобальной переменной точки входа.

Создание

const_type = coder.Constant(v) создает coder.Constant введите из значения v.

const_type = coder.newtype('constant', v) создает coder.Constant введите из значения v.

Примечание

После создания coder.Constant объект, можно создать постоянную глобальную переменную g, которая имеет значение v при помощи codegen команда: codegen -globals {'g', coder.Constant(v)}.

Свойства

расширить все

Фактическое значение константы. Также указывает значение входного параметра v который используется для построения типа входного параметра.

Здесь, в первом примере, когда k передается в codegen со значением v как 42соответствующий тип входа выводится как double. Точно так же во втором примере, когда k передается в codegen со значением v как 42соответствующий вход определяется как uint8.

Пример: k = coder.Constant(42);

Пример: k = coder.Constant(uint8(42));

Примеры

свернуть все

Написание MATLAB® функциональные myAdd это возвращает сумму двух значений.

function c = myAdd(a,b) %#codegen
c = a + b;
end

Сгенерируйте MEX-функцию myAdd_mex. Задайте входные параметры как константы со значениями 1 и 3.

codegen myAdd -args {1,3} -report

Функции myAdd_mex с постоянными входными значениями, отличными от 1 и 3, для примера, 2 и 5.

myAdd_mex(2,5)
ans =

     7

Сгенерированная MEX-функция принимает любое постоянное значение типа, которое вы указали в входном параметре в codegen команда.

Сгенерируйте MEX-функцию myAdd_mex путем определения coder.Constant объект как один из входных параметров. Задайте первый входной параметр как двойной скаляр, а второй входной параметр как константу со значением 1.

codegen myAdd -args {1, coder.Constant(3)} -report

Функции myAdd_mex с постоянными входными значениями 2 и 5.

myAdd_mex(2,5)
Constant function parameter 'b' has a different run-time value than the compile-time value.

Error in myAdd_mex

В MEX-функцию отображается ошибка для значения входа 5. Чтобы исправить ошибку, присвойте постоянное значение 3, которое является значением, которое вы передали во время компиляции.

Сгенерируйте код MEX для функции MATLAB, которая имеет постоянный вход. Используйте ConstantInputs параметр конфигурации, чтобы контролировать, включает ли сигнатура MEX-функции постоянные входы и должны ли постоянные входные значения совпадать со значениями во время компиляции.

Написание функции MATLAB myAdd это возвращает сумму двух значений.

function c = myAdd(a,b) %#codegen
c = a + b;
end

Создайте объект строения для генерации кода MEX.

mexcfg = coder.config('mex');

Проверьте значение параметра конфигурации проверки постоянного входного сигнала.

mexcfg.ConstantInputs
ans =

    'CheckValues'

Оно имеет значение по умолчанию.

Сгенерируйте MEX-функцию myAdd_mex. Задайте, что первый аргумент является двойным скаляром, а второй аргумент является константой со значением 3.

codegen myAdd -config mexcfg -args {1, coder.Constant(3)}

Функции myAdd_mex. Предоставьте входные 3 для второго аргумента.

myadd_mex(1,3)
ans =

    4

Изменение ConstantInputs чтобы MEX-функция не проверяла, чтобы входное значение совпадало со значением, заданным во время генерации кода.

mexcfg.ConstantInputs = 'IgnoreValues';

Сгенерируйте myAdd_mex.

codegen myAdd -config mexcfg -args {1, coder.Constant(3)}

Функции myAdd_mex с постоянным входным значением, отличным от 3, для примера 5.

myadd_mex(1,5)
ans =

    4

Значение MEX-функции игнорируется входом 5. В нем используется значение 3, которое является значением, заданным для постоянного аргумента b когда вы сгенерировали myAdd_mex.

Изменение ConstantInputs так, что сигнатура MEX-функции не включает в себя постоянный входной параметр.

mexcfg.ConstantInputs = 'Remove';

Сгенерируйте myAdd_mex.

codegen myAdd -config mexcfg -args {1, coder.Constant(3)}

Функции myAdd_mex. Предоставьте значение 1 для a. Не задайте значение для постоянного аргумента b.

myAdd_mex(1)
ans =

    4

Сгенерируйте код С для функции, специализированной для случая, когда вход имеет постоянное значение.

Написание функции MATLAB identity который копирует его вход в его выход.

function y = identity(u) %#codegen
y = u;

Создайте объект строения кода для генерации кода C

cfg = coder.config('lib');

Сгенерируйте код С для identity с постоянным входом 42, а затем сгенерируйте отчет.

codegen identity -config cfg -args {coder.Constant(42)} -report

В отчете на вкладке C code нажмите identity.c.

Сигнатура функции для identity является:

double identity(void)

Задайте постоянное значение для глобальной переменной во время компиляции.

Написание функции MATLAB myFunction который возвращает значение глобальной константы g.

function  y = myFunction() %#codegen
global g;

y = g;

end

Создайте объект строения для генерации кода MEX.

cfg = coder.config('mex');

Задайте массив ячеек globals который объявляет, что g является постоянной глобальной переменной со значением 5.

globals = {'g', coder.Constant(5)};

Сгенерируйте MEX-функцию для myFunction при помощи -globals опция для определения глобальных данных.

codegen -config cfg -globals globals myFunction

Запустите сгенерированную MEX-функцию.

myFunction_mex
ans =

     5

Ограничения

  • Вы не можете использовать coder.Constant на разреженных матрицах или на структурах, массивах ячеек или классах, которые содержат разреженные матрицы.

Введенный в R2011a