Оперативная замена кода является методом оптимизации, который использует один буфер, то есть, ту же память, чтобы сохранить входной параметр функции и выходные данные, как в x=foo(x)
.
Когда вы генерируете код C or 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);
Сохраните табличный файл определения. Используйте имя табличной функции определения, чтобы назвать файл.
Протестировать пример:
Укажите таблицу, которая содержит запись в заменяющей библиотеке кода.
Сконфигурируйте генератор кода, чтобы пользоваться заменяющей библиотекой кода и включать Заменяющий Отчет Кода в отчет генерации кода.
Сгенерируйте заменяющий код и отчет генерации кода.
Рассмотрите замены кода.