coder.replace

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

Синтаксис

coder.replace(ifNoReplacement)

Описание

пример

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 только влияет на генерацию кода и не изменяет генерация MEX-функции или код MATLAB. 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.

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

свернуть все

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

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

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

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

Советы

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

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

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

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

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

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

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

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

Представленный в R2012b