Оперативная замена кода является методом оптимизации, который использует один буфер, то есть, ту же память, чтобы сохранить входной параметр функции и выходные данные, как в x=foo(x)
.
Когда вы генерируете C или Код С++ из кода MATLAB®, генератор кода поддерживает оперативную замену аргумента функции кода. Когда вы в интерактивном режиме создаете заменяющую запись таблицы кода с Заменяющим Инструментом Кода, можно задать оперативную замену аргумента функции. Можно также задать оперативную замену аргумента функции программно с Заменяющим Library API Кода.
Аргумент должен быть указателем.
Аргумент может существовать только с еще одним аргументом.
Задайте входной параметр, столь же оперативный (память долей) с выходным аргументом или выходным аргументом как оперативный с входным параметром.
Этот пример показывает, как задать оперативную замену аргумента функции когда заменяющий код для функции MATLAB с Заменяющим Инструментом Кода. Инструмент осуществляет оперативные требования спецификации аргумента, когда вы добавляете аргументы и изменяете свойства аргумента.
Создайте следующую функцию MATLAB, customFunction.m
.
function x = customFunction(x) % Function that updates the input and returns it as an output coder.replace('-errorifnoreplacement'); x = sin(x);
В Заменяющем Инструменте Кода добавьте новую таблицу, выберите ту таблицу и добавьте новую функциональную запись. Для получения дополнительной информации смотрите, Задают Заменяющие Отображения Кода.
На вкладке Mapping Information выберите Custom
для параметра Function.
В текстовом поле function-name назовите пользовательскую функцию. В данном примере введите имя customFunction
.
Под полем списка Conceptual arguments нажмите +, чтобы добавить два аргумента. По умолчанию инструмент задает выходной аргумент y1
и входной параметр u1
, оба из типа double
.
В разделе Replacement function> Function prototype введите имя custom_function_inplace_impl
в текстовом поле Name.
Под полем списка Function arguments нажмите +, чтобы добавить два аргумента реализации функции. По умолчанию инструмент задает выходной аргумент y1
и входной параметр u1
, оба из типа double
.
Для каждого входного параметра, который вы хотите задать как оперативные с соответствующим выходным аргументом в поле Argument properties, устанавливают флажок Pointer. Раздел Argument properties диалогового окна расширяется, чтобы включать In-place argument выпадающий список. В данном примере в списке Function arguments, выберите входной параметр u1
, и затем установите флажок Pointer.
Из списка In-place argument выберите y1
, выходной аргумент в пользу заменяющего отображения кода. Поле списка Function arguments обновляется, чтобы показать возможные оперативные отображения аргумента.
Выберите и удалите одно из двух возможных отображений аргумента. В данном примере удалите отображение y1<-->u1
.
В поле Function signature preview, если функциональная подпись появляется как ожидалось, нажимают Apply. В противном случае внесите изменения, и затем нажмите Apply. Функциональная подпись для этого примера, появляется как
void custom_function_inplace_impl(double* u1);
Нажмите Validate entry.
Сохраните заменяющую таблицу кода в той же папке как customFunction.m
. Назовите файл htfl_inplace_table.m
.
Протестировать пример:
Укажите таблицу, которая содержит запись в заменяющей библиотеке кода.
Сконфигурируйте генератор кода, чтобы пользоваться заменяющей библиотекой кода и включать Заменяющий Отчет Кода в отчет генерации кода.
Сгенерируйте заменяющий код и отчет генерации кода.
Рассмотрите замены кода.
Этот пример показывает, как задать оперативную замену аргумента функции когда заменяющий код для функции MATLAB программно. Для входного аргумента реализации, который совместно использует буфер памяти, пример:
Определяет имя аргумента реализации к тому же имени в качестве соответствующего концептуального аргумента.
Сопоставляет соответствующий аргумент реализации со свойством ArgumentForInPlaceUse
аргумента.
Создайте следующую функцию MATLAB, customFunction.m
.
function y = customFunction(x) % Function that updates the input and returns it as an output coder.replace('-errorifnoreplacement'); x = sin(x);
Создайте табличный файл определения, который содержит функциональное определение. Например:
function hTable = crl_table_inplace()
В теле функции составьте таблицу путем вызова функционального RTW.TflTable
.
hTable = RTW.TflTable;
Создайте запись для отображения функции с вызовом функции RTW.TflCFunctionEntry
.
hEnt = RTW.TflCFunctionEntry;
Параметры записи функции множества с вызовом функции setTflCFunctionEntryParameters
.
setTflCFunctionEntryParameters(hEnt, ... 'Key', 'customFunction', ... 'Priority', 100, ... 'ImplementationName', 'custom_function_inplace_impl', ... 'SideEffects', true);
Создайте концептуальные аргументы y1
и u1
. Этот пример использует вызовы getTflArgFromString
и функций addConceptualArg
, чтобы создать и добавить аргументы.
arg = getTflArgFromString(hEnt, 'y1','double'); arg.IOType = 'RTW_IO_OUTPUT'; addConceptualArg(hEnt, arg); arg = getTflArgFromString(hEnt, 'u1','double'); addConceptualArg(hEnt, arg);
Создайте аргументы реализации и добавьте их в запись. Этот пример использует вызовы функции getTflArgFromString
, чтобы создать аргументы реализации, которые сопоставляют с аргументами в заменяющем прототипе функции: выходной аргумент y1
и входной параметр u1
. Для каждого аргумента пример использует удобный метод setReturn
или addArgument
, чтобы задать, является ли аргумент возвращаемым значением или аргументом. Для каждого аргумента этот пример добавляет аргумент в массив записи аргументов реализации.
arg = getTflArgFromString(hEnt, 'y2','void'); arg.IOType = 'RTW_IO_OUTPUT'; hEnt.Implementation.setReturn(arg); arg = getTflArgFromString(hEnt, 'u1','double*'); arg.ArgumentForInPlaceUse = 'y1'; hEnt.Implementation.addArgument(arg);
Добавьте запись в заменяющую таблицу кода с вызовом функции addEntry
.
addEntry(hLib, hEnt);
Сохраните табличный файл определения. Используйте имя табличной функции определения, чтобы назвать файл.
Протестировать пример:
Укажите таблицу, которая содержит запись в заменяющей библиотеке кода.
Сконфигурируйте генератор кода, чтобы пользоваться заменяющей библиотекой кода и включать Заменяющий Отчет Кода в отчет генерации кода.
Сгенерируйте заменяющий код и отчет генерации кода.
Рассмотрите замены кода.