coder.replace

Замените текущую реализацию функции MATLAB функцией библиотеки замещения кода в сгенерированном коде

Описание

пример

coder.replace(ifNoReplacement) заменяет текущую реализацию функции функцией библиотеки замещения кода.

Во время генерации кода, когда вы вызываете coder.replace в MATLAB® функция, генератор кода выполняет поиск библиотеки замены кода для сигнатуры функции:

[y1_type, y2_type,..., yn_type]=fcn(x1_type, x2_type,...,xn_type)
Типы входных данных x1_type, x2_type,...,xn_type и типы выходов, выведенные из реализации y1_type, y2_type,..., yn_type. Если в зарегистрированной библиотеке замещения кода обнаруживается соответствие функции MATLAB, содержимое функции MATLAB отбрасывается и заменяется вызовом функции библиотеки замещения кода. Если совпадение не найдено, код генерируется без замены.

coder.replace Влияния только генерацию кода и не изменяет код MATLAB или генерацию MEX-функции. coder.replace предназначен для замены функции MATLAB, которая имеет поведение, эквивалентное ее реализации функции замены. Если тело функции MATLAB пусто или не эквивалентно реализации функции замены, это может быть исключено из сгенерированного кода. Функция MATLAB перед заменой используется для симуляции. Вы несете ответственность за проверку числового результата симуляции и генерации кода после замены.

Примеры

свернуть все

Замените функцию MATLAB на пользовательскую реализацию, которая зарегистрирована в библиотеке замещения кода.

Написание функции MATLAB, calculate, который необходимо заменить пользовательской реализацией, replacement_calculate_impl.c, в сгенерированном коде.

function y = calculate(x)
% Search in the code replacement library for replacement
% and use replacement function if available
% Error if not found
  coder.replace('-errorifnoreplacement');
  y = sqrt(x);
end

Написание функции MATLAB, top_function, который вызывает calculate.

function out = top_function(in)
  p = calculate(in);
  out = exp(p);
end

Создайте файл с именем crl_table_calculate.m который описывает значения функций для таблицы замены кода. Функция замены replacement_calculate_impl.c и заголовочный файл replacement_calculate_impl.h должен быть на пути.

hLib = RTW.TflTable;

%---------- entry: calculate ----------- 
hEnt = RTW.TflCFunctionEntry;
setTflCFunctionEntryParameters(hEnt, ...
  'Key', 'calculate', ...
  'Priority', 100, ...
  'ArrayLayout', 'COLUMN_MAJOR', ...
  'ImplementationName', ...
  'replacement_calculate_impl', ...
  'ImplementationHeaderFile', ...
  'replacement_calculate_impl.h', ...
  'ImplementationSourceFile', ...
  'replacement_calculate_impl.c')
% Conceptual Args

arg = getTflArgFromString(hEnt, 'y1','double');
arg.IOType = 'RTW_IO_OUTPUT';
addConceptualArg(hEnt, arg);

arg = getTflArgFromString(hEnt, 'u1','double');
addConceptualArg(hEnt, arg);

% Implementation Args 

arg = getTflArgFromString(hEnt, 'y1','double');
arg.IOType = 'RTW_IO_OUTPUT';
hEnt.Implementation.setReturn(arg); 

arg = getTflArgFromString(hEnt, 'u1','double');
hEnt.Implementation.addArgument(arg);

addEntry(hLib, hEnt);

Создайте rtwTargetInfo файл:

function rtwTargetInfo(tr)
% rtwTargetInfo function to register a code 
% replacement library (CRL) 
% for use with codegen

  % Register the CRL defined in local function locCrlRegFcn
  tr.registerTargetInfo(@locCrlRegFcn);

end % End of RTWTARGETINFO

function thisCrl = locCrlRegFcn

  % Instantiate a CRL registry entry
  thisCrl = RTW.TflRegistry;

  % Define the CRL properties
  thisCrl.Name = 'My calculate Example'; 
  thisCrl.Description = 'Demonstration of function replacement';
  thisCrl.TableList = {'crl_table_calculate'};
  thisCrl.BaseTfl = 'C89/C90 (ANSI)';
  thisCrl.TargetHWDeviceType = {'*'};

end % End of LOCCRLREGFCN

Обновите регистрационную информацию. В командной строке MATLAB введите:

RTW.TargetRegistry.getInstance('reset'); 

Потому что тип данных x и y является double, coder.replace ищет double = calculate(double) в библиотеке замещения кода. Если он находит совпадение, codegen генерирует следующий код:

real_T top_function(real_T in)
{
  real_T p;
  p = replacement_calculate_impl(in);
  return exp(p);
}

В сгенерированном коде функция замены replacement_calculate_impl заменяет функцию MATLAB calculate.

Входные параметры

свернуть все

The ifNoReplacement аргумент определяет, выдает ли генератор кода ошибку или предупреждение, если совпадение не найдено. Если этот аргумент опущен, генератор кода не выдает ошибку или предупреждение.

coder.replace('-errorifnoreplacement') заменяет текущую реализацию функции функцией библиотеки замещения кода. Если совпадение не найдено, генерация кода прекращается. Генерируется сообщение об ошибке, описывающее отказ поиска библиотеки замещения кода.

coder.replace('-warnifnoreplacement') заменяет текущую реализацию функции функцией библиотеки замещения кода. Если совпадение не найдено, генерируется код для текущей функции. Предупреждение, описывающее отказ поиска библиотеки замещения кода, генерируется во время генерации кода.

Пример: coder.replace()

Совет

  • coder.replace требуется Embedded Coder® лицензия.

  • coder.replace является функцией генерации кода и не изменяет код MATLAB или генерацию MEX-функции.

  • coder.replace не предназначен для многократного вызова в функции.

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

  • coder.replace не поддерживает режим насыщения и округления во время поиска библиотеки замещения кода.

  • coder.replace не поддерживает varargout.

  • coder.replace не поддерживает замену функции, которая требует выравнивания данных.

  • coder.replace не поддерживает замену функции MATLAB входами переменного размера.

Введенный в R2012b