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