Чтобы улучшить скорость выполнения алгоритмов или упростить интеграцию с внешним кодом или данными, можно задать заменяющие отображения кода, которые применяют определенное размещение для хранения элементов массива в памяти. По умолчанию генератор кода хранит элементы массива в главном столбцом размещении. Чтобы изменить размещение на главный строкой, измените значение параметра записи 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. Существует несколько способов настроить концептуальные аргументы. Этот пример использует вызовы 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 = [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