Если сгенерированный код должен соответствовать определенному шаблону кодирования или требуется большая гибкость, например, для дальнейшего повышения производительности, можно переназначить выходные данные оператора на входные позиции в списке аргументов функции реализации.
Примечание
Повторное сопоставление выходов с входами функций реализации поддерживается только для замены оператора.
Например, для операции суммирования генератор кода создает код, подобный:
add8_Y.Out1 = u8_add_u8_u8(add8_U.In1, add8_U.In2);
При повторной привязке выходного сигнала к первому входу генератор кода создает код, аналогичный:
u8_add_u8_u8(&add8_Y.Out1;, add8_U.In1, add8_U.In2);
Следующий файл определения таблицы для операции суммирования пересматривает выходные данные оператора y1 в качестве первого входного аргумента функции.
Создайте файл определения таблицы, содержащий определение функции. Например:
function hTable = crl_table_add_uint8В теле функции создайте таблицу путем вызова функции. RTW.TflTable.
hTable = RTW.TflTable;
Создание записи для сопоставления оператора с вызовом RTW.TflCOperationEntry функция.
% Create operation entry
op_entry = RTW.TflCOperationEntry;Установка параметров ввода оператора с вызовом setTflCOperationEntryParameters функция. В вызове функции установите свойство SideEffects кому true.
setTflCOperationEntryParameters(op_entry, ... 'Key', 'RTW_OP_ADD', ... 'Priority', 90, ... 'ImplementationName', 'u8_add_u8_u8', ... 'ImplementationHeaderFile', 'u8_add_u8_u8.h', ... 'ImplementationSourceFile', 'u8_add_u8_u8.c', ... 'SideEffects', true );
Создание концептуальных аргументов y1, u1, и u2. Существует несколько способов настройки концептуальных аргументов. В этом примере используются вызовы getTflArgFromString и addConceptualArg для создания и добавления аргументов.
arg = getTflArgFromString(hTable, 'y1', 'uint8'); arg.IOType = 'RTW_IO_OUTPUT'; addConceptualArg(op_entry, arg); arg = getTflArgFromString(hTable, 'u1', 'uint8'); addConceptualArg(op_entry, arg ); arg = getTflArgFromString(hTable, 'u2', 'uint8'); addConceptualArg(op_entry, arg );
Создайте аргументы реализации. Существует несколько способов настройки аргументов реализации. В этом примере используются вызовы getTflArgFromString для создания аргументов. При определении возвращаемого аргумента функции реализации создайте новый void выходной аргумент, например, y2. При определении аргумента функции реализации для концептуального выходного аргумента (y1), задайте выходной аргумент оператора в качестве дополнительного входного аргумента. Отметить его IOType в качестве выходного. Сделать его тип типом указателя. Методы удобства setReturn и addArgument укажите, является ли аргумент возвращаемым значением или аргументом, и добавьте аргумент к массиву аргументов реализации элемента.
% Create new void output y2 arg = getTflArgFromString(hTable, 'y2', 'void'); arg.IOType = 'RTW_IO_OUTPUT'; op_entry.Implementation.setReturn(arg); % Set y1 as first input arg, mark IOType as output, and use pointer type arg=getTflArgFromString(hTable, 'y1', 'uint8*'); arg.IOType = 'RTW_IO_OUTPUT'; op_entry.Implementation.addArgument(arg); arg=getTflArgFromString(hTable, 'u1', 'uint8'); op_entry.Implementation.addArgument(arg); arg=getTflArgFromString(hTable, 'u2', 'uint8'); op_entry.Implementation.addArgument(arg);
Добавление записи в таблицу замены кода с вызовом addEntry функция.
addEntry(hTable, op_entry);
Сохраните файл определения таблицы. Используйте имя функции определения таблицы для присвоения имени файлу.
Чтобы проверить этот пример:
Зарегистрируйте сопоставление замены кода.
Создайте модель, содержащую блок добавления.

Сконфигурируйте модель со следующими настройками:
На панели Решатель (Solver) выберите решатель с фиксированным шагом.
На панели «Создание кода» выберите целевой системный файл на основе ERT.
На панели «Создание кода» > «Интерфейс» выберите библиотеку замены кода, содержащую запись операции добавления.
Задайте для параметра Оптимизировать глобальный доступ к данным значение Use global to hold temporary results для уменьшения количества копий данных в созданном коде.
Создание кода и отчета о создании кода.
Просмотрите замены кода.