Можно использовать заменяющие записи кода, чтобы заменить код, который генератор кода производит для операций (<<
) сдвига.
Этот пример создает заменяющую запись кода, чтобы заменить оставленные операции сдвига для данных int16
. Пример задает функцию, сопоставляющую программно. Также можно использовать Code Replacement Tool, чтобы задать то же отображение.
Создайте табличный файл определения, который содержит функциональное определение. Например:
function hTable = crl_table_shift_left_int16
В теле функции составьте таблицу путем вызова функционального RTW.TflTable
.
hTable = RTW.TflTable;
Создайте запись для отображения оператора с вызовом функции RTW.TflCOperationEntry
.
op_entry = RTW.TflCOperationEntry;
Установите параметры записи оператора с вызовом функции 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');
Создайте аргумент int16
в качестве концептуального аргумента y1
и возвращаемого значения реализации. Существует несколько способов настроить концептуальные аргументы и аргументы реализации. Этот пример использует вызовы getTflArgFromString
и функций addConceptualArg
, чтобы создать концептуальный аргумент и добавить его в запись. Удобный метод setReturn
задает аргумент как возвращаемое значение реализации.
arg = getTflArgFromString(hTable, 'y1', 'int16'); arg.IOType = 'RTW_IO_OUTPUT'; addConceptualArg(op_entry, arg); op_entry.Implementation.setReturn(arg);
Создайте аргумент int16
как концептуальные и аргумент u1
реализации. Этот пример использует вызовы getTflArgFromString
и функций addConceptualArg
, чтобы создать концептуальный аргумент и добавить его в запись. Удобный метод addArgument
задает аргумент как входной параметр реализации.
arg = getTflArgFromString(hTable, 'u1', 'int16'); addConceptualArg(op_entry, arg); op_entry.Implementation.addArgument(arg);
Создайте аргумент 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, чтобы задать то же отображение.
Создайте табличный файл определения, который содержит функциональное определение. Например:
function hTable = crl_table_shift_left_fixpt_net_slope
В теле функции составьте таблицу путем вызова функционального RTW.TflTable
.
hTable = RTW.TflTable;
Создайте запись для отображения оператора с вызовом функции RTW.TflCOperationEntryGenerator_Netslope
. Эта функция обеспечивает доступ к параметрам фиксированной точки NetSlopeAdjustmentFactor
и NetFixedExponent
.
op_entry = RTW.TflCOperationEntryGenerator_NetSlope;
Установите параметры записи оператора с вызовом функции 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');
Создайте концептуальные аргументы 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);
Создайте аргументы реализации. Существует несколько способов настроить аргументы реализации. Этот пример использует вызовы 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);
Создайте аргумент int8
как концептуальные и аргумент u2
реализации. Этот пример использует вызовы getTflArgFromString
и функций addConceptualArg
, чтобы создать концептуальный аргумент и добавить его в запись. Этот аргумент задает количество битов, чтобы переключить предыдущий входной параметр. Поскольку тип аргумента не релевантен, введите проверку, отключен путем установки свойства CheckType
на false
. Удобный метод addArgument
задает аргумент как входной параметр реализации.
arg = getTflArgFromString(hTable, 'u2', 'uint8'); arg.CheckType = false; addConceptualArg(op_entry, arg); op_entry.Implementation.addArgument(arg);
Добавьте запись в заменяющую таблицу кода с вызовом функции addEntry
.
addEntry(hTable, op_entry);
Сохраните табличный файл определения. Используйте имя табличной функции определения, чтобы назвать файл.