exponenta event banner

createCRLEntry

Создание записи таблицы замены кода из спецификаций строк концептуальных аргументов и аргументов реализации

Описание

пример

tableEntry = createCRLEntry(crTable,conceptualSpecification,implementationSpecification) возвращает запись таблицы замены кода. Запись отображает концептуальное представление функции или оператора в представление реализации. conceptualSpecification аргумент - символьный вектор или строковый скаляр, который определяет имя и концептуальные аргументы, знакомые генератору кода, для заменяемой функции или оператора. implementationSpecification аргумент - это вектор символов или строковый скаляр, который определяет имя и аргументы реализации C/C + + для функции замены.

Эта функция не поддерживает:

  • Реализации C++

  • Выравнивание данных

  • Замена оператора аргументами чистого уклона

  • Параметры ввода (например, приоритет, алгоритм, информация о здании)

  • Замена семафора и мьютекса

В спецификациях синтаксиса поместите пробел до и после символа оператора. Например, использовать double u1 + double u2 вместо double u1+double u2. Также звездочка (*), тильда (~) и точка с запятой (;) имеют следующее значение.

СимволЗначение
*
  • Следование поддерживаемому типу данных, например int32*, пройти по ссылке (указателю). Если концептуальные аргументы не являются скалярными, в спецификации реализации передайте их по ссылке.

  • Как часть определения типа данных с фиксированной точкой, например, fixdt(1,32,*), подстановочный знак.

~В зависимости от положения символа наклоны или смещение должны быть одинаковыми для всех типов данных.
;Разделяет диапазоны размеров. Например, [1 10; 1 100] задает вектор длиной от 10 до 100.

В следующей таблице показан синтаксис для концептуальных и реализационных спецификаций на основе:

  • Создается ли запись для функции или оператора.

  • Тип или характеристика замены кода.

Тип заменыКонцептуальный синтаксисСинтаксис реализации
Синтаксис замены кода функции
Типичный double y1 = sin(double u1)double y1 = mySin(double u1)
Деривация типов данных аргументов реализации из концептуальной спецификацииdouble y1 = sin(double u1)y1 = mySin(u1)
Деривация аргументов реализации и типов данных из концептуальной спецификацииdouble y1 = sin(double u1)mySin
Изменение типа данныхsingle y1 = sin(single u1)double y1 = mySin(double u1)
Переупорядочить аргументыdouble y1 = atan2(double u1, double u2)y1 = myAtan(u2, u1)
Укажите аргументы вектора столбцаdouble y1 = sin(double u1[10])double y1 = mySin(double* u1)
Укажите аргументы вектора столбца и размерный диапазонdouble y1[1 100; 1 100] = sin(double u1[1 100; 1 100])mySin(double* u1, double* y1)
Изменить значение, возвращаемое в качестве выходного аргументаdouble y1 = sin(double u1)mySin(double u1, double* y1)
Укажите типы данных с фиксированной точкойfixdt(1,16,3) y1 = sin(fixdt(1,16,3) u1)int16 y1 = mySin(int16 u1)
Укажите типы данных и набор фиксированных точек CheckSlope кому false, CheckBias кому true, и Bias к 0fixdt(1,16,*) y1 = sin(fixdt(1,16,*) u1)int16 y1 = mySin(int16 u1)
Укажите типы данных и набор фиксированных точек SlopesMustBeTheSame кому true, CheckSlope кому false, CheckBias кому true, и Bias к 0fixdt(1,16,~) y1 = sin(fixdt(1,16,~) u1)int16 y1 = mySin(int16 u1)
Укажите типы данных и набор фиксированных точек SlopesMustBeTheSame кому true, BiasMustBeTheSame кому true, CheckSlope кому false, и CheckBias кому falsefixdt(1,16,~,~) y1 = sin(fixdt(1,16,~,~) u1)int16 y1 = mySin(int16 u1)
Укажите несколько выходных аргументов[double y1 double y2] = foo(double u1, double u2)double y1 = myFoo(double u1, double u2, double* y2)
Синтаксис замены кода оператора
Типичный int16 y1 = int16 u1 + int16 u2int16 y1 = myAdd(int16 u1, int16 u2)
Укажите типы данных с фиксированной точкойfixdt(1,16,3) y1 = fixdt(1,16,3) u1 + fixdt(1,16,3) u2int16 y1 = myAdd(int16 u1, int16 u2)
Укажите типы данных и набор фиксированных точек CheckSlope кому false, CheckBias кому true, и Bias к 0fixdt(1,16,*) y1 = fixdt(1,16,*) u1 + fixdt(1,16,*) u2int16 y1 = myAdd(int16 u1, int16 u2)
Укажите типы данных с фиксированной точкой, подстановочный знак, уклоны должны быть одинаковыми и нулевое смещениеfixdt(1,16,~,0) y1 = fixdt(1,16,~,0) u1 + fixdt(1,16,~,0) u2int16 y1 = myAdd(int16 u1, int16 u2)
Приглашать на однотипные ролиint16 y1 = int8 u1int16 y1 = myCast(int8 u1)
Изменениеint16 y1 = int16 u1 << int16 u2
int16 y1 = int16 u1 >> int16 u2
int16 y1 = int16 u1 .>> int16 u2
int16 y1 = myShiftLeft(int16 u1, int16 u2)
int16 y1 = myShiftRightArithmetic(int16 u1, int16 u2)
int16 y1 = myShiftRightLogical(int16 u1, int16 u2)
Указать реляционный операторbool y1 = int16 u1 < int16 u2bool y1 = myLessThan(int6 u1, int16 u2)
Указание умножения и деленияint32 y1 = int32 u1 * in32 u2 / in32 u3int32 y1 = myMultDiv(int32 u1, int32 u2, int32 u3)
Задание умножения матрицыdouble y1[10][10] = double u1[10][10] * double u2[10][10]myMult(double* u1, double* u2, double* y1)
Умножение матрицы по элементамdouble y1[10][10] = double u1[10][10] .* double u2[10][10]myMult(double* u1, double* u2, double* y1)
Задание умножения матрицы с транспонированием входного аргументаdouble y1[10][10] = double u1[10][10]' * double u2[10][10]myMult(double* u1, double* u2, double* y1)
Задание умножения матрицы на эрмитовый для входного аргументаcdouble y1[10][10] = cdouble u1[10][10]' * cdouble u2[10][10]
cdouble y1[10][10] = cdouble u1[10][10] * cdouble u2[10][10]'
myMult(cdouble* u1, cdouble* u2, cdouble* y1)
Укажите деление левой матрицыdouble y1[10][10] = double u1[10][10] \ double u2[10][10]myLeftDiv(double* u1, double* u2, double* y1)
Укажите правое деление матрицыdouble y1[10][10] = double u1[10][10] / double u2[10][10]myRightDiv(double* u1, double* u2, double* y1)

Примеры

свернуть все

Создайте файл определения таблицы, содержащий определение функции.

function crTable = crl_table_sinfcn()

В теле функции создайте таблицу замены кода.

crTable = RTW.TflTable;

Создание записи таблицы для sin функция.

tableEntry = createCRLEntry(crTable, ...
    'double y1 = sin(double u1)', ...
    'double y1 = mySin(double u1)');

Установка параметров ввода для sin функция. Чтобы создать код замены, укажите, что генератор кода использует заголовки и исходные файлы mySin.h и mySin.c.

setTflCFunctionEntryParameters(tableEntry, ...
    'ImplementationHeaderFile', 'mySin.h', ...
    'ImplementationSourceFile', 'mySin.c');

Добавьте запись в таблицу.

addEntry(crTable, tableEntry);

Создайте файл определения таблицы, содержащий определение функции.

function crTable = crl_table_addfcn()

В теле функции создайте таблицу замены кода.

crTable = RTW.TflTable;

Создайте запись таблицы для оператора сложения.

tableEntry = createCRLEntry(crTable, ...
    'int16 y1 = int16 u1 + int16 u2', ...
    'int16 y1 = myAdd(int16 u1, int16 u2)');

Задайте параметры записи таким образом, чтобы запись указывала сложение после суммирования. Чтобы создать код замены, укажите, что генератор кода использует заголовки и исходные файлы myAdd.h и myAdd.c.

setTflCOperationEntryParameters(tableEntry, ...
    'EntryInfoAlgorithm', 'RTW_CAST_AFTER_OP', ...
    'ImplementationHeaderFile', 'myAdd.h', ...
    'ImplementationSourceFile', 'myAdd.c')); 

Добавьте запись в таблицу.

addEntry(crTable, tableEntry);

Создайте файл определения таблицы, содержащий определение функции.

function crTable = crl_table_intaddfcn()

В теле функции создайте таблицу замены кода.

crTable = RTW.TflTable;

Создайте запись таблицы для операции добавления фиксированной точки с подписью, требующей одинакового уклона по типам.

tableEntry = createCRLEntry(crTable, ...
    'fixdt(1,16,~,0) y1 = fixdt(1,16,~,0) u1 + fixdt(1,16,~,0) u2', ...
    'int16 y1 = myAdd(int16 u1, int16 u2)');

Задайте параметры записи. Установка параметров алгоритма для режимов сложения и насыщения после суммирования и округления. Чтобы создать код замены, укажите, что генератор кода использует заголовки и исходные файлы myIntAdd.h и myIntAdd.c.

setTflCOperationtionEntryParameters(tableEntry, ...
    'EntryInfoAlgorithm', 'RTW_CAST_AFTER_OP', ...
    'SaturationMode', 'RTW_SATURATE_ON_OVERFLOW', ...
    'RoundingMode', 'RTW_ROUND_SIMPLEST', ...
    'ImplementationHeaderFile', 'myIntAdd.h', ...
    'ImplementationSourceFile', 'myIntAdd.c');

Добавьте запись в таблицу.

addEntry(crTable, tableEntry);

Создайте файл определения таблицы, содержащий определение функции.

function crTable = crl_table_sinfcn()

В теле функции создайте таблицу замены кода.

crTable = RTW.TflTable;

Создание записи таблицы для sin функция, где аргументы реализации совпадают с концептуальными аргументами.

tableEntry = createCRLEntry(crTable, ...
    'double y1 = sin(double u1)', ...
    'y1 = mySin(u1)');

Задайте параметры записи. Чтобы создать код замены, укажите, что генератор кода использует заголовки и исходные файлы mySin.h и mySin.c.

setTflCFunctionEntryParameters(tableEntry, ...
    'ImplementationHeaderFile', 'mySin.h', ...
    'ImplementationSourceFile', 'mySin.c'); 

Добавьте запись в таблицу.

addEntry(crTable, tableEntry);

Входные аргументы

свернуть все

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

Представление имени или символа и концептуальных входных и выходных аргументов для функции или оператора, заменяемых программным обеспечением, указанных как вектор символов или скаляр строки. Концептуальные аргументы соблюдают правила именования («y1», «u1», «u2»,...) и типы данных, привычные для генератора кода. Таблица синтаксиса в разделе Описание (Description) используется для определения синтаксиса, используемого для спецификации концептуального аргумента.

Пример: 'double y1 = sin(double u1)'

Пример: 'int16 y1 = int16 u1 + int16 u2'

Представление имени и входных и выходных аргументов реализации для замещающей функции C или C++, заданной как вектор символов или скаляр строки. Аргументы реализации соответствуют спецификациям имени C/C + + и типа данных. Используйте таблицу синтаксиса в разделе Описание (Description), чтобы определить синтаксис для спецификации аргумента реализации.

Пример: 'double y1 = my_sin(double u1)'

Пример: 'int16 y1 = myAdd(int16 u1, int16 u2)'

Выходные аргументы

свернуть все

Запись таблицы замены кода, представляющая потенциальную замену кода для функции или оператора, возвращаемая как объект. Отображение концептуального представления функции или оператора. conceptualSpecification, к представительству реализации C/C + +,implementationSpecification.

Представлен в R2015a