Переключите левые операции и замену кода

Можно использовать заменяющие записи кода, чтобы заменить код, который генератор кода производит для сдвига (<<) операции.

Переключите левые для int16 Данные

Этот пример создает заменяющую запись кода, чтобы заменить оставленные операции сдвига для int16 данные. Пример задает функцию, сопоставляющую программно. В качестве альтернативы можно использовать Code Replacement Tool, чтобы задать то же отображение.

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

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

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

    op_entry = RTW.TflCOperationEntry;
    
  4. Установите параметры записи оператора с вызовом setTflCOperationEntryParameters функция. Параметры задают тип операции как оставленный сдвиг и имя заменяющей функции как my_shift_left.

    setTflCOperationEntryParameters(op_entry, ...
        'Key',                      'RTW_OP_SL', ...
        'Priority',                 50, ...
        'ImplementationName',       'my_shift_left', ...
        'ImplementationHeaderFile', 'some_hdr.h', ...
        'ImplementationSourceFile', 'some_hdr.c');
  5. Создайте int16 аргумент в качестве концептуального аргумента y1 и возвращаемое значение реализации. Существует несколько способов настроить концептуальные аргументы и аргументы реализации. Этот пример использует вызовы getTflArgFromString и addConceptualArg функции, чтобы создать концептуальный аргумент и добавить его в запись. Удобный метод setReturn задает аргумент как возвращаемое значение реализации.

    arg = getTflArgFromString(hTable, 'y1', 'int16');
    arg.IOType = 'RTW_IO_OUTPUT';
    addConceptualArg(op_entry, arg);
    op_entry.Implementation.setReturn(arg);
  6. Создайте int16 аргумент как концептуальные и аргумент u1 реализации. Этот пример использует вызовы getTflArgFromString и addConceptualArg функции, чтобы создать концептуальный аргумент и добавить его в запись. Удобный метод addArgument задает аргумент как входной параметр реализации.

    arg = getTflArgFromString(hTable, 'u1', 'int16');
    addConceptualArg(op_entry, arg);
    op_entry.Implementation.addArgument(arg);
    
  7. Создайте int8 аргумент как концептуальные и аргумент u2 реализации. Этот пример использует вызовы getTflArgFromString и addConceptualArg функции, чтобы создать концептуальный аргумент и добавить его в запись. Этот аргумент задает количество битов, чтобы переключить предыдущий входной параметр. Поскольку тип аргумента не релевантен, пример отключает проверяющий типа, устанавливающий CheckType свойство к false. Удобный метод addArgument задает аргумент как входной параметр реализации.

    arg = getTflArgFromString(hTable, 'u2', 'int8');
    arg.CheckType = false;
    addConceptualArg(op_entry, arg);
    op_entry.Implementation.addArgument(arg);
  • Функциональный getTflArgFromString называется, чтобы создать int8 входной параметр. Этот аргумент добавляется к записи оператора и в качестве третьего концептуального аргумента и в качестве второго входного параметра реализации.

  • Добавьте запись в заменяющую таблицу кода с вызовом addEntry функция.

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

Переключите левые Используя сетевой наклон

Можно использовать заменяющие записи кода, чтобы заменить код, который генератор кода производит для сдвига (<<) операции.

Этот пример создает заменяющую запись кода, чтобы заменить оставленные операции сдвига для данных фиксированной точки с помощью сетевого наклона. Пример задает функцию, сопоставляющую программно. В качестве альтернативы можно использовать Code Replacement Tool, чтобы задать то же отображение.

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

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

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

    op_entry = RTW.TflCOperationEntryGenerator_NetSlope;
  4. Установите параметры записи оператора с вызовом setTflCOperationEntryParameters функция. Параметры задают тип операции как оставленный сдвиг, режим насыщения, как насыщают на целочисленном переполнении, округляя режимы как к отрицательной бесконечности и имени заменяющей функции как my_fxp_shift_left. NetSlopeAdjustmentFactor и NetFixedExponent задайте F и E части сетевого наклонного F2E.

    InFL = 2;
    InWL = 16;
    InSgn = true;
    OutFL = 4;
    OutWL = 32;
    OutSgn = true;
    setTflCOperationEntryParameters(op_entry, ...
       'Key',                       'RTW_OP_SL', ...
       'Priority',                  50, ...
       'SaturationMode',            'RTW_SATURATE_ON_OVERFLOW', ...
       'RoundingModes',             {'RTW_ROUND_FLOOR'}, ...
       'NetSlopeAdjustmentFactor',  1.0, ...
       'NetFixedExponent',          (OutFL - InFL),...
       'ImplementationName',        'my_fxp_shift_left', ...
       'ImplementationHeaderFile',  'some_hdr.h', ...
       'ImplementationSourceFile',  'some_hdr.c');
  5. Создайте концептуальные аргументы y1 и u1. Существует несколько способов настроить концептуальные аргументы. Этот пример использует вызовы createAndAddConceptualArg функция, чтобы создать и добавить аргумент с одним вызовом функции. Каждый аргумент задан как фиксированная точка и подписан. Каждый аргумент указывает, что заменяющая обработка запросов кода не проверяет на точное совпадение наклону сайта вызова и смещает значения.

    createAndAddConceptualArg(op_entry, 'RTW.TflArgNumeric', ...
        'Name',         'y1', ...
        'IOType',       'RTW_IO_OUTPUT', ...
        'CheckSlope',   false, ...
        'CheckBias',    false, ...
        'DataTypeMode', 'Fixed-point: binary point scaling', ...
        'IsSigned',     OutSgn, ...
        'WordLength',   OutWL, ...
        'FractionLength',OutFL);
    
    createAndAddConceptualArg(op_entry, 'RTW.TflArgNumeric', ...
        'Name',         'u1', ...
        'IOType',       'RTW_IO_INPUT', ...
        'CheckSlope',   false, ...
        'CheckBias',    false, ...
        'DataTypeMode', 'Fixed-point: binary point scaling', ...
        'IsSigned',     InSgn, ...
        'WordLength',   InWL, ...
        'FractionLength',InFL);
  6. Создайте аргументы реализации. Существует несколько способов настроить аргументы реализации. Этот пример использует вызовы createAndSetCImplementationReturn и createAndAddImplementationArg функции, чтобы создать и добавить аргументы реализации в запись. Аргументы реализации должны описать основные типы числовых данных (не типы данных с фиксированной точкой).

    createAndSetCImplementationReturn(op_entry, 'RTW.TflArgNumeric', ...
        'Name',           'y1', ...
        'IOType',         'RTW_IO_OUTPUT', ...
        'IsSigned',       OutSgn, ...
        'WordLength',     OutWL, ...
        'FractionLength', 0);
    
    createAndAddImplementationArg(op_entry, 'RTW.TflArgNumeric', ...
         'Name',           'u1', ...
         'IOType',         'RTW_IO_INPUT', ...
         'IsSigned',       InSgn, ...
         'WordLength',     InWL, ...
         'FractionLength', 0);
  7. Создайте int8 аргумент как концептуальные и аргумент u2 реализации. Этот пример использует вызовы getTflArgFromString и addConceptualArg функции, чтобы создать концептуальный аргумент и добавить его в запись. Этот аргумент задает количество битов, чтобы переключить предыдущий входной параметр. Поскольку тип аргумента не релевантен, введите проверку, отключен путем установки CheckType свойство к false. Удобный метод addArgument задает аргумент как входной параметр реализации.

    arg = getTflArgFromString(hTable, 'u2', 'uint8');
    arg.CheckType = false;
    addConceptualArg(op_entry, arg);
    op_entry.Implementation.addArgument(arg);
    
  8. Добавьте запись в заменяющую таблицу кода с вызовом addEntry функция.

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

Похожие темы