Повторно сопоставьте оператор Выход с входным параметром функции

Если ваш сгенерированный код должен соответствовать определенному шаблону кодирования, или вы хотите, чтобы больше гибкости, например, далее улучшало производительность, можно повторно сопоставить оператор выходные параметры, чтобы ввести положения в списке аргументов функции реализации.

Примечание

Переотображение выходных параметров к входным параметрам функции реализации поддерживается только для замены оператора.

Например, для операции суммы, генератор кода производит код, похожий на:

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 как первый входной аргумент функции.

  1. Создайте табличный файл определения, который содержит функциональное определение. Например:

    function hTable = crl_table_add_uint8
  2. В теле функции составьте таблицу путем вызывания функции RTW.TflTable.

    hTable = RTW.TflTable;
    
  3. Создайте запись для отображения оператора с вызовом RTW.TflCOperationEntry функция.

    % Create operation entry 
    op_entry = RTW.TflCOperationEntry;
  4. Установите параметры записи оператора с вызовом 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 );
  5. Создайте концептуальные аргументы 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 );
  6. Создайте аргументы реализации. Существует несколько способов настроить аргументы реализации. Этот пример использует вызовы 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);
  7. Добавьте запись в заменяющую таблицу кода с вызовом addEntry функция.

    addEntry(hTable, op_entry);
  8. Сохраните табличный файл определения. Используйте имя табличной функции определения, чтобы назвать файл.

Протестировать этот пример:

  1. Укажите заменяющее отображение кода.

  2. Создайте модель, которая включает блок Add.

  3. Сконфигурируйте модель со следующими настройками:

    • На панели Solver выберите решатель фиксированного шага.

    • На панели Code Generation выберите ERT-based system target file.

    • На Code Generation> панель Interface, выберите заменяющую библиотеку кода, которая содержит вашу запись операции сложения.

    • Установите параметр Optimize global data access на Use global to hold temporary results уменьшать копии данных в сгенерированном коде.

  4. Сгенерируйте код и отчет генерации кода.

  5. Рассмотрите замены кода.

Похожие темы