Соответствие форма-агностика замещения кода позволяет согласовывать матричные входы для определенных операций на основе количества элементов в отличие от формы матрицы. Для примера, a 6x1
матрица соответствует 2x3
матрица в форме-agnostic совпадает, потому что оба имеют в общей сложности 6 элементов. Такие соответствия могут быть выполнены только в том случае, если выходные и входные параметры непрерывно выделены в памяти, и если функция замены может выполняться поэлементно. Соответствие формоагностическая матрица увеличивает скорость замены, поэтому выгодно для замены, которая не требует рассмотрения формы матрицы.
Записи замены кода Shape-agnostic могут быть созданы либо с помощью пользовательского интерфейса Code Replacement Tool, либо программно.
В этом примере показано, как настроить замену матрицы формы-agnostic для записи таблицы замещения кода сложения.
Откройте Инструмент замены кода. Из MATLAB® в командной строке введите crtool
.
Составьте таблицу замещения кода. Перейти к File > New Table
.
Создайте запись таблицы. Shape-agnostic замена матрицы поддерживает только Math Operation записи таблицы. Либо right-click
по своей таблице или перейдите к File > New Entry
и выберите Math Operation. Появится информация о отображении. Из Operation
раскрывающееся меню, выберите addition
.
Создайте концептуальные аргументы. The Conceptual operation
раздел определяет каждый из ваших концептуальных аргументов. Чтобы включить замену формы-agnostic, установите Argument type:
на matrix
чтобы открыть Matrix entry properties
меню.
Установите параметры входа. В Matrix entry properties
выберите меню Allow shape-agnostic match
флажок, чтобы включить замену формы-agnostic.
Проверьте запись таблицы. Либо кликните validate entry
или щелкните правой кнопкой мыши запись и выберите Validate entries
.
Нажмите save
.
На этом отображении показаны настройки Code Replacement Tool для этого примера.
В этом примере показано, как настроить замену матрицы формы-agnostic для записи таблицы замещения кода сложения.
Составьте таблицу замещения кода. Создайте определение функции с именем таблицы 'ShapeAgnosticTable'
. Функции RTW.TflTable
для создания таблицы.
function hLib = ShapeAgnosticTable hLib = RTW.TflTable;
Создайте запись таблицы для замены кода. Shape-agnostic замена поддерживает только операция значения, как задано вызовом RTW.TflCOperationEntry
.
hEnt = RTW.TflCOperationEntry;
Установите параметры входа, чтобы настроить обработку входных параметров. Можно включить shape-agostic замену матрицы путем установки параметра entry 'AllowShapeAgnosticMatch'
на true
.
hEnt.setTflCOperationEntryParameters( ... 'Key', 'RTW_OP_ADD', ... 'Priority', 100, ... 'AllowShapeAgnosticMatch', true, ... 'ImplementationName', 'MyAdd_Matrix', ... 'SideEffects', true);
Создайте концептуальные аргументы. В данном примере создайте концептуальные аргументы y1, u1 и u2 с вызовами функции create, RTW.TflArgMatrix
, и добавить функцию, addConceptualArg
.
arg = RTW.TflArgMatrix('y1', 'RTW_IO_OUTPUT', 'double'); arg.DimRange = [2 2; 50 50]; hEnt.addConceptualArg(arg); arg = RTW.TflArgMatrix('u1', 'RTW_IO_INPUT', 'double'); arg.DimRange = [2 3; 2 3]; hEnt.addConceptualArg(arg); arg = RTW.TflArgMatrix('u2', 'RTW_IO_INPUT', 'double'); arg.DimRange = [2 3; 2 3]; hEnt.addConceptualArg(arg);
Создайте аргументы реализации. В данном примере вызовите функцию getTflArgFromString
для создания аргументов. Определите возвращаемый аргумент реализации как void
выходной аргумент. Задайте концептуальный выходной аргумент y1 как указатель с IOType как output
.
arg = hEnt.getTflArgFromString('unused','void'); arg.IOType = 'RTW_IO_OUTPUT'; hEnt.Implementation.setReturn(arg); arg = hEnt.getTflArgFromString('u1','double*'); hEnt.Implementation.addArgument(arg); arg = hEnt.getTflArgFromString('u2','double*'); hEnt.Implementation.addArgument(arg); arg = hEnt.getTflArgFromString('y1','double*'); arg.IOType = 'RTW_IO_OUTPUT'; hEnt.Implementation.addArgument(arg); arg = hEnt.getTflArgFromString('numElements','uint32',6); hEnt.Implementation.addArgument(arg);
Добавьте эту запись в таблицу замещения кода с функцией addEntry
.
hLib.addEntry( hEnt );
Сохраните таблицу как имя функции. В данном примере ShapeAgnosticTable
.
Проверьте свою запись в командной строке MATLAB. Активируйте файл определения таблицы с помощью следующей команды.
hTbl = ShapeAgnosticTable
Example Model
Пример этой записи таблицы замещения кода демонстрируется с помощью следующей модели. Даже при том, что матричная форма в этой модели не совпадает с записью, операция может выполняться поэлементно, и запись включает соответствие форма-агностика, поэтому замена кода наблюдается в сгенерированном коде.
/* Outport: '<Root>/Out1' incorporates: * Inport: '<Root>/In1' * Inport: '<Root>/In2' * Sum: '<Root>/Add' */ MyAdd_Matrix(Demo_U.In1, Demo_U.In2, Demo_Y.Out1, 6U);
Если вы включите соответствие формы-агностика для операции, которая по своей сути не вычисляется поэлементно, выполняется регулярное соответствие.
Когда включено соответствие фигуры-агностики, замена кода не учитывает настройку для 'DimRange'
. Вместо этого он вычисляет количество элементов и использует это значение, чтобы соответствовать.
Если вы работаете с пользовательскими записями замены кода, измените 'do_match'
функция для принятия общего количества элементов в отличие от матричных размерностей. Для получения дополнительной информации см. раздел Настройка процесса соответствия и замены.
setTflCOperationEntryParameters