Задать заданные параметры для ввода оператором в таблицу замены кода
В этом примере показано, как использовать setTflCOperationEntryParameters установка параметров для записи оператора замены кода для uint8 добавление, которое соответствует алгоритму cast-after-sum.
op_entry = RTW.TflCOperationEntry; op_entry.setTflCOperationEntryParameters( ... 'Key', 'RTW_OP_ADD', ... 'EntryInfoAlgorithm', 'RTW_CAST_AFTER_OP', ... 'Priority', 90, ... 'SaturationMode', 'RTW_SATURATE_UNSPECIFIED', ... 'RoundingModes', {'RTW_ROUND_UNSPECIFIED'}, ... 'ImplementationName', 'u8_add_u8_u8', ... 'ImplementationHeaderFile', 'u8_add_u8_u8.h', ... 'ImplementationSourceFile', 'u8_add_u8_u8.c');
В этом примере показано, как использовать setTflCOperationEntryParameters установка параметров для записи оператора замены кода для фиксированной точки int16 разделение. Запись в таблице определяет чистое масштабирование между входами оператора и выходными данными для отображения диапазона значений наклона и смещения в операции замены.
op_entry = RTW.TflCOperationEntryGenerator_NetSlope; op_entry.setTflCOperationEntryParameters( ... 'Key', 'RTW_OP_DIV', ... 'Priority', 90, ... 'SaturationMode', 'RTW_WRAP_ON_OVERFLOW', ... 'RoundingModes', {'RTW_ROUND_CEILING'}, ... 'NetSlopeAdjustmentFactor', 1.0, ... 'NetFixedExponent', 0.0, ... 'ImplementationName', 's16_div_s16_s16', ... 'ImplementationHeaderFile', 's16_div_s16_s16.h', ... 'ImplementationSourceFile', 's16_div_s16_s16.c' );
В этом примере показано, как использовать setTflCOperationEntryParameters установка параметров для записи оператора замены кода для фиксированной точки uint16 добавление, которое соответствует алгоритму cast-after-sum. Для параметров SlingMustBeTheSame и MustExerZeroNetBias должно быть установлено значение true задать одинаковый наклон и нулевое чистое смещение на входах и выходах оператора. Это сопоставляет относительные значения наклона и смещения (а не конкретную комбинацию наклона и смещения) с операцией замены.
op_entry = RTW.TflCOperationEntryGenerator; op_entry.setTflCOperationEntryParameters( ... 'Key', 'RTW_OP_ADD', ... 'EntryInfoAlgorithm', 'RTW_CAST_AFTER_OP', ... 'Priority', 90, ... 'SaturationMode', 'RTW_WRAP_ON_OVERFLOW', ... 'RoundingModes', {'RTW_ROUND_UNSPECIFIED'}, ... 'SlopesMustBeTheSame', true, ... 'MustHaveZeroNetBias', true, ... 'ImplementationName', 'u16_add_SameSlopeZeroBias', ... 'ImplementationHeaderFile', 'u16_add_SameSlopeZeroBias.h', ... 'ImplementationSourceFile', 'u16_add_SameSlopeZeroBias.c');
hEntry - Обработка записи таблицы замены кода hEntry является дескриптором записи таблицы замены кода, ранее возвращенной одним из экземпляров класса в таблице.
| Создание экземпляра класса | Поддержка |
|---|---|
| Поддерживает замену оператора. |
| Предоставляет параметры для сложения и вычитания с фиксированной точкой, которые недоступны в |
| Параметры чистого откоса для умножения и деления с фиксированной точкой, которые недоступны в |
| Поддерживает замену нескалярных операторов функциями MathWorks BLAS. |
| Поддерживает замену нескалярных операторов функциями ANSI ®/ISO ® C BLAS. |
(где | Поддерживает замену оператора с использованием пользовательских записей таблицы замены кода. |
Если требуется указать SlopesMustBeTheSame или MustHaveZeroNetBias для записи оператора создайте экземпляр записи таблицы с помощью вместо hEntry = RTW.TflCOperationEntryGenerator. Если вы хотите использовать hEntry = RTW.TflCOperationEntryNetSlopeAdjustmentFactor и NetFixedExponent, создайте экземпляр записи таблицы с помощью .hEntry = RTW.TflCOperationEntryGenerator_NetSlope
Пример: op_entry
varargin - Пары «имя-значение» аргументов для записи операцииПример: 'Key','RTW_OP_ADD'
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
'Key','RTW_OP_ADD''AcceptExprInput' - Указывает, принимает ли операция реализации входы выраженийtrue | false AcceptExprInput значение помечает генератор кода, что функция реализации, описанная этой записью, принимает входные выражения. Значение по умолчанию: true если ImplType равняется FCN_IMPL_FUNCT и false если ImplType равняется FCN_IMPL_MACRO.
Если значение равно true, входы выражений интегрированы в сгенерированный код в форме, аналогичной этой форме:
rtY.Out1 = myAdd(rtU.In1, rtU.In2 * rtU.In3);
Если значение равно false, создается временная переменная для ввода выражения:
real_T temp; temp = rtU.In2 * rtU.In3; rtY.Out1 = myAdd(rtU.In1, temp);
Пример: 'AcceptExprInput',true
'AdditionalHeaderFiles' - Указывает дополнительные файлы заголовка для ввода таблицы{} (по умолчанию) | массив символьных векторов | строковый массив AdditionalHeaderFiles значение указывает дополнительные файлы заголовка для записи таблицы замены кода. Векторы символов или строковый массив могут содержать маркеры. Например, в маркере $mytoken$, mytoken - переменная, определяемая как вектор символа или скаляр строки в рабочей области MATLAB ® или как функция MATLAB в пути поиска, которая возвращает вектор символа.
Пример: 'AdditionalHeaderFiles',{}
'AdditionalIncludePaths' - Указывает дополнительные пути включения для записи таблицы{} (по умолчанию) | массив символьных векторов | строковый массив AdditionalIncludePaths значение указывает полный путь дополнительных путей включения для записи замены кода. Векторы символов или строковый массив могут содержать маркеры. Например, в маркере $mytoken$, mytoken - переменная, определяемая как вектор символа или скаляр строки в рабочей области MATLAB или как функция MATLAB в пути поиска, которая возвращает вектор символа.
Пример: 'AdditionalIncludePaths',{}
'AdditionalLinkObjs' - Указывает дополнительные объекты связи для ввода таблицы{} (по умолчанию) | массив символьных векторов | строковый массив AdditionalLinkObjs значение определяет дополнительные объекты связи для записи таблицы замены кода. Векторы символов или строковый массив могут содержать маркеры. Например, в маркере $mytoken$, mytoken - переменная, определяемая как вектор символа или скаляр строки в рабочей области MATLAB или как функция MATLAB в пути поиска, которая возвращает вектор символа.
Пример: 'AdditionalLinkObjs',{}
'AdditionalLinkObjsPaths' - Указывает дополнительные пути к объектам связи для записи таблицы{} (по умолчанию) | массив символьных векторов | строковый массив AdditionalLinkObjsPaths значение указывает полный путь дополнительных путей объекта ссылки для записи замены кода. Векторы символов или строковый массив могут содержать маркеры. Например, в маркере $mytoken$, mytoken - переменная, определяемая как вектор символа или скаляр строки в рабочей области MATLAB или как функция MATLAB в пути поиска, которая возвращает вектор символа.
Пример: 'AdditionalLinkObjsPaths',{}
'AdditionalSourceFiles' - указывает дополнительные исходные файлы для ввода таблицы{} (по умолчанию) | массив символьных векторов | строковый массив AdditionalSourceFiles значение указывает дополнительные исходные файлы для записи таблицы замены кода. Векторы символов или строковый массив могут содержать маркеры. Например, в маркере $mytoken$, mytoken - переменная, определяемая как вектор символа или скаляр строки в рабочей области MATLAB или как функция MATLAB в пути поиска, которая возвращает вектор символа.
Пример: 'AdditionalSourceFiles',{}
'AdditionalSourcePaths' - Указывает дополнительные исходные пути для записи таблицы{} (по умолчанию) | массив символьных векторов | строковый массив AdditionalSourcePaths значение указывает полный путь дополнительных исходных путей для записи замены кода. Векторы символов или строковый массив могут содержать маркеры. Например, в маркере $mytoken$, mytoken - переменная, определяемая как вектор символа или скаляр строки в рабочей области MATLAB или как функция MATLAB в пути поиска, которая возвращает вектор символа.
Пример: 'AdditionalSourcePaths',{}
'AdditionalCompileFlags' - Указывает дополнительные флаги компилятора для ввода таблицы{} (по умолчанию) | массив символьных векторов | строковый массив AdditionalCompileFlags значение указывает дополнительные флаги, необходимые для компиляции исходных файлов, определенных для записи таблицы замены кода.
Пример: 'AdditionalCompileFlags',{}
'AdditionalLinkFlags' - Указывает дополнительные флаги компоновщика для ввода таблицы{} (по умолчанию) | массив символьных векторов | строковый массив AdditionalLinkFlags значение указывает дополнительные флаги, необходимые для связывания скомпилированных файлов для записи таблицы замены кода.
Пример: 'AdditionalLinkFlags',{}
'AllowShapeAgnosticMatch' - Включение матричных соответствий на основе общего количества элементов, а не определенной формы матрицыfalse (по умолчанию) | true AllowShapeAgnosticMatch значение обеспечивает совпадение замены кода на основе общего количества элементов, а не конкретной формы матрицы для матриц, которые последовательно распределены в памяти. Дополнительные сведения см. в разделе Разрешение агностического соответствия формы.
Пример: 'AllowShapeAgnosticMatch', false
'ArrayLayout' - Указывает макет хранилища массива для ввода таблицы'COLUMN_MAJOR' (по умолчанию) | 'ROW_MAJOR' | 'COLUMN_AND_ROW' ArrayLayout значение указывает порядок элементов массива в памяти, поддерживаемый реализацией замены. По умолчанию реализация замены поддерживает компоновку основных данных столбца. Для ROW-MAJOR, реализация замены поддерживает компоновку основных данных строк. Для COLUMN_AND_ROW, реализация замены поддерживает макеты данных «основной столбец» и «основная строка».
Пример: 'ArrayLayout','ROW_MAJOR'
'EntryInfoAlgorithm' - задает математический алгоритм, соответствующий записи таблицы;'RTW_CAST_BEFORE_OP' (по умолчанию) | 'RTW_CAST_AFTER_OP' EntryInfoAlgorithm значение указывает алгоритм для указанной математической функции, который должен быть сопоставлен для замены оператора. Библиотеки замены кода поддерживают замену на основе алгоритма для математических операций RTW_OP_ADD и RTW_OP_MINUS. Допустимые аргументы для поддерживаемых операций перечислены в таблице. Аргументы имеют одинаковое значение для обеих операций.
| Аргумент | Значение |
|---|---|
| Перед выполнением операции введите приведенные входные значения в тип выходных данных. Если тип вывода не может точно представлять входные значения, потери могут возникнуть в результате приведения к типу вывода. Дополнительные потери могут возникнуть при приведении результата операции к окончательному типу вывода. |
| Вычислите идеальный результат работы входных данных. Затем введите приведение результата к типу выходных данных. Потеря происходит во время приведения типа. Этот алгоритм ведет себя аналогично языку Си, за исключением случаев, когда сигнатура операндов не совпадает. Например, при добавлении подписанной длинной операции к беззнаковому длинному операнду стандартные правила языка Си преобразуют подписанный длинный операнд в беззнаковый длинный операнд. Результатом является значение, которое не является идеальным. |
Пример: 'EntryInfoAlgorithm','RTW_CAST_AFTER_OP'
'GenCallback' - Указывает обратный вызов, следующий за созданием кода'' (по умолчанию) | 'RTW.copyFileToBuildDir' GenCallback задает обратный вызов, следующий за генерацией кода. При указании 'RTW.copyFileToBuildDir', и если эта запись операции сопоставлена и используется, генератор кода вызывает функцию RTW.copyFileToBuildDir после генерации кода. Эта функция обратного вызова копирует в папку построения дополнительные файлы заголовка, источника или объекта, указанные для этой записи.
Пример: 'GenCallback','RTW.copyFileToBuildDir'
'ImplementationHeaderFile' - Указывает имя файла заголовка, объявляющего операцию реализации'' (по умолчанию) | символьный вектор | строковый скаляр ImplementationHeaderFile значение указывает имя файла заголовка, который объявляет функцию реализации. Вектор символов или строковый скаляр может включать маркеры. Например, в маркере $mytoken$, mytoken - переменная, определяемая как вектор символа или скаляр строки в рабочей области MATLAB или как функция MATLAB в пути поиска, которая возвращает вектор символа.
Пример: 'ImplementationHeaderFile','s32_mul.h'
'ImplementationHeaderPath' - Указывает путь к файлу заголовка реализации'' (по умолчанию) | символьный вектор | строковый скаляр ImplementationHeaderPath значение указывает полный путь к файлу заголовка реализации. Вектор символов или строковый скаляр может включать маркеры. Например, в маркере $mytoken$, mytoken - переменная, определяемая как вектор символа или скаляр строки в рабочей области MATLAB или как функция MATLAB в пути поиска, которая возвращает вектор символа.
Пример: 'ImplementationHeaderPath', fullfile('$MATLAB_ROOT', 'crl')
'ImplementationName' - Указывает имя функции реализации'' (по умолчанию) | символьный вектор | строковый скаляр ImplementationName значение указывает имя функции реализации, которое может совпадать или отличаться от Key имя.
Пример: 'ImplementationName','s32_mul_s32_s32_sat'
'ImplementationSourceFile' - указывает имя исходного файла реализации'' (по умолчанию) | символьный вектор | строковый скаляр ImplementationSourceFile значение указывает имя исходного файла реализации. Вектор символов или строковый скаляр может включать маркеры. Например, в маркере $mytoken$, mytoken - переменная, определяемая как вектор символа или скаляр строки в рабочей области MATLAB или как функция MATLAB в пути поиска, которая возвращает вектор символа.
Пример: 'ImplementationSourceFile','s32_mul.c'
'ImplementationSourcePath' - Указывает путь к исходному файлу реализации'' (по умолчанию) | символьный вектор | строковый скаляр ImplementationSourcePath значение указывает полный путь к исходному файлу реализации. Вектор символов или строковый скаляр может включать маркеры. Например, в маркере $mytoken$, mytoken - переменная, определяемая как вектор символа или скаляр строки в рабочей области MATLAB или как функция MATLAB в пути поиска, которая возвращает вектор символа.
Пример: 'ImplementationSourcePath', fullfile('$MATLAB_ROOT', 'crl')
'ImplType' - указывает, предназначена ли запись таблицы для функции реализации или макроса;'FCN_IMPL_FUNCT' (по умолчанию) | 'FCN_IMPL_MACRO' ImplType значение указывает тип записи таблицы. Использовать FCN_IMPL_FUNCT для функции или FCN_IMPL_MACRO для макроса.
Пример: 'ImplType','FCN_IMPL_FUNCT'
'Key' - Указывает ключ для замены оператором Key значение указывает ключ для заменяемого оператора. Ключ должен соответствовать ключу оператора, указанному в списке Код, который можно заменить из кода MATLAB или Код, который можно заменить из моделей Simulink.
Пример: 'Key','RTW_OP_ADD'
'MustHaveZeroNetBias' - Указывает требование чистого смещения для концептуальных аргументов записей Add/Minusfalse (по умолчанию) | true MustHaveZeroNetBias значение указывает, требуется ли для соответствия замены, чтобы чистое смещение для концептуальных аргументов записей Add/Minus было равно нулю. Для ввода и вывода оператора с фиксированной точкой этот параметр должен быть установлен в true. Создание экземпляра записи с помощью вместо hEntry = RTW.TflCOperationEntryGenerator. hEntry = RTW.TflCOperationEntry
Для записей Mul/Div/MulDiv/Shift/Cast:
Генератор кода игнорирует значение этого аргумента.
Смещение концептуальных аргументов для записей Mul/Div/MulDiv/Shift/Cast должно быть равно нулю, чтобы произошла замена.
Пример: 'MustHaveZeroNetBias',true
'NetFixedExponent' - Указывает фиксированную экспонентную часть чистого откоса для концептуальных аргументов с фиксированной точкой записей Mul/Div/MulDiv/Shift/Cast0 (по умолчанию) | numeric scalar NetSlopeAdjustmentFactor значение указывает фиксированную часть (E) градации чистого откоса (F2E, например, -3.0) для концептуальных аргументов с фиксированной точкой, необходимых для замены записей Mul/Div/MulDiv/Shift/Cast. Создание экземпляра записи с помощью вместо hEntry = RTW.TflCOperationEntryGenerator_NetSlope.hEntry = RTW.TflCOperationEntry
Для записей Add/Minus:
Генератор кода игнорирует значение этого аргумента.
Поправочный коэффициент уклона, составляющий часть чистого уклона концептуальных аргументов для записей Add/Minus, должен быть равен нулю, чтобы иметь место совпадение замены.
Пример: 'NetFixedExponent', -3.0
'NetSlopeAdjustmentFactor' - Задает часть корректировки уклона для требований к чистому уклону для концептуальных аргументов с фиксированной точкой записей Mul/Div/MulDiv/Shift/Cast1 (по умолчанию) | числовой скаляр NetSlopeAdjustmentFactor значение задает часть корректировки откоса в чистом откосе (F2E, например, 1,0) для концептуальных аргументов с фиксированной точкой, необходимых для соответствия замены для записей Mul/Div/MulDiv/Shift/Cast. Создание экземпляра записи с помощью вместо hEntry = RTW.TflCOperationEntryGenerator_NetSlope.hEntry = RTW.TflCOperationEntry
Для записей Add/Minus:
Генератор кода игнорирует значение этого аргумента.
Поправочный коэффициент уклона, составляющий часть чистого уклона концептуальных аргументов для записей Add/Minus, должен быть равен нулю, чтобы иметь место совпадение замены.
Пример: 'NetSlopeAdjustmentFactor',1.5
'Priority' - Определяет приоритет поиска записи оператора100 (по умолчанию) | целочисленное значение 0.. 100 Priority значение указывает приоритет поиска записи операции относительно других записей того же имени операции и списка концептуальных аргументов в этой таблице. Наивысший приоритет равен 0, а наименьший приоритет равен 100. Если таблица предоставляет две реализации для операции, реализация с более высоким приоритетом затеняет реализацию с более низким приоритетом.
Пример: 'Priority',100
'RoundingModes' - Указывает режимы округления, поддерживаемые функцией реализации'RTW_ROUND_UNSPECIFIED' (по умолчанию) | 'RTW_ROUND_FLOOR' | 'RTW_ROUND_CEILING' | 'RTW_ROUND_ZERO' | 'RTW_ROUND_NEAREST' | 'RTW_ROUND_NEAREST_ML' | 'RTW_ROUND_CONV' | 'RTW_ROUND_SIMPLEST' | массив векторов символов | строковый массив RoundingModes значение определяет один или несколько режимов округления, поддерживаемых функцией реализации.
Пример: 'RoundingModes',{'RTW_ROUND_UNSPECIFIED'}
'SaturationMode' - определяет режим насыщения, поддерживаемый функцией реализации'RTW_SATURATE_UNSPECIFIED' (по умолчанию) | 'RTW_SATURATE_ON_OVERFLOW' | 'RTW_WRAP_ON_OVERFLOW' | символьный вектор | строковый скаляр SaturationMode значение указывает режим насыщения, поддерживаемый функцией реализации.
Пример: 'SaturationMode','RTW_SATURATE_UNSPECIFIED'
'SideEffects' - Определяет необходимость оптимизации функции реализации.false (по умолчанию) | true SideEffects значение помечает генератор кода, чтобы не оптимизировать функцию реализации, описанную в этой записи. Этот параметр применяется к функциям реализации, которые возвращают void но не должны быть оптимизированы, такие как memcpy реализация или функция реализации, которая обращается к значениям глобальной памяти. Только для этих функций внедрения необходимо включить этот параметр и указать значение. true.
Пример: 'SideEffects',false
'SlopesMustBeTheSame' - Задание требований к уклону для концептуальных аргументов записей Mul/Div/MulDiv/Shift/Castfalse (по умолчанию) | true SlopesMustBeTheSame значение указывает, требуется ли для замены, чтобы наклон был одинаковым для концептуальных аргументов записей Mul/Div/MulDiv/Shift/Cast. Создание экземпляра записи с помощью вместо hEntry = RTW.TflCOperationEntryGenerator.hEntry = RTW.TflCOperationEntry
Для записей Add/Minus:
Генератор кода игнорирует значение этого аргумента.
Этот параметр должен иметь значение true. Если установлено значение true, наклоны концептуальных аргументов равны для совпадения замены.
Пример: 'SlopesMustBeTheSame',true
'StoreFcnReturnInLocalVar' - Указывает, следует ли сохранять функцию реализации независимо от параметров сворачивания выраженийfalse (по умолчанию) | true StoreFcnReturnInLocalVar значение помечает генератор кода, что возвращаемое значение функции реализации, описанной в этой записи, должно храниться в локальной переменной независимо от других настроек сворачивания выражения. Если значение равно false, другие параметры сворачивания выражений определяют, является ли возвращаемое значение свернутым. Сохранение возвращаемых функций в локальной переменной может повысить четкость генерируемого кода. В этом примере показан код, созданный при сворачивании выражения:
void sw_step(void)
{
if (ssub(sadd(sw_U.In1, sw_U.In2), sw_U.In3) <=
smul(ssub(sw_U.In4, sw_U.In5),sw_U.In6)) {
sw_Y.Out1 = sw_U.In7;
} else {
sw_Y.Out1 = sw_U.In8;
}
}С StoreFcnReturnInLocalVar установить в значение trueсгенерированный код потенциально легче понять и отладить:
void sw_step(void)
{
real32_T rtb_Switch;
real32_T hoistedExpr;
......
rtb_Switch = sadd(sw_U.In1, sw_U.In2);
rtb_Switch = ssub(rtb_Switch, sw_U.In3);
hoistedExpr = ssub(sw_U.In4, sw_U.In5);
hoistedExpr = smul(hoistedExpr, sw_U.In6);
if (rtb_Switch <= hoistedExpr) {
sw_Y.Out1 = sw_U.In7;
} else {
sw_Y.Out1 = sw_U.In8;
}
}Пример: 'StoreFcnReturnInLocalVar',false
addAdditionalHeaderFile | addAdditionalIncludePath | addAdditionalLinkObj | addAdditionalLinkObjPath | addAdditionalSourceFile | addAdditionalSourcepath
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.