Чтобы улучшить скорость выполнения алгоритмов или упростить интегрирование с внешним кодом или данными, можно задать отображения замены кода, которые применяют определенное размещение для хранения элементов массива в памяти. По умолчанию генератор кода хранит элементы массива в размещении с основным столбцом. Чтобы изменить размещение на row-major, измените значение параметра entry ArrayLayout
на ROW_MAJOR
.
В следующем файле определения таблицы для операции суммирования используется размещение массива основной строки.
Создайте файл определения таблицы, который содержит описание функции. Для примера:
function hTable = crl_table_rowmajor_matrix
В теле функции создайте таблицу, вызвав функцию RTW.TflTable
.
hTable = RTW.TflTable;
Создайте запись для отображения оператора с вызовом на RTW.TflCOperationEntry
функция.
% Create operation entry hEnt = RTW.TflCOperationEntry;
Установите параметры входа оператора с вызовом setTflCOperationEntryParameters
функция. В вызове функции установите параметр ArrayLayout
на ROW_MAJOR
setTflCOperationEntryParameters(hEnt, ... 'Key', 'RTW_OP_ADD', ... 'Priority', 100, ... 'ArrayLayout', 'ROW_MAJOR', ... 'ImplementationName', 'MyMul_ROW', ... 'ImplementationHeaderFile', 'MyMul_ROW.h', ... 'ImplementationSourceFile', 'MyMul_ROW.c');
Создайте концептуальные аргументы y1, u1 и u2. Существует несколько способов настроить концептуальные аргументы. Этот пример использует вызовы к getTflArgFromString
и 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 = [3 4; 3 4]; hEnt.addConceptualArg(arg);
Создайте аргументы реализации. Существует несколько способов настроить аргументы реализации. Этот пример использует вызовы к getTflArgFromString
функция для создания аргументов. Определяя возвращаемый аргумент функции реализации, создайте void
выходной аргумент. При определении аргумента функции реализации для концептуального выходного аргумента (y1
), установите выходной аргумент оператора как дополнительный входной параметр. Отметьте его IOType
как вывод. Сделать его тип типом указателя. Методы удобства setReturn
и addArgument
задает, является ли аргумент возврата значением или аргументом, и добавляет аргумент к массиву аргументов реализации элемента.
% Implementation Args 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('u3','uint32',2); arg.Type.ReadOnly = true; hEnt.Implementation.addArgument(arg); arg = hEnt.getTflArgFromString('u4','uint32',3); hEnt.Implementation.addArgument(arg); arg = hEnt.getTflArgFromString('u5','uint32',3); hEnt.Implementation.addArgument(arg); arg = hEnt.getTflArgFromString('u6','uint32',4); hEnt.Implementation.addArgument(arg);
Добавьте запись в таблицу замещения кода с вызовом в addEntry
функция.
addEntry(hTable, hEnt);
Сохраните файл определения таблицы. Чтобы назвать файл, используйте имя функции определения таблицы. Затем сгенерируйте код и отчет о генерации кода и проверьте замены кода.
coder.replace
| setTflCFunctionEntryParameters
| setTflCOperationEntryParameters