Для некоторых блоков математической функции вы можете замена кода системы управления на основе вычисления или алгоритма аппроксимации, сконфигурированного для того блока. Например, можно сконфигурировать:
Блок Reciprocal Sqrt, чтобы использовать Newton-Raphson
или метод вычисления Exact
.
Блок Trigonometric Function, с набором Function к sin
, cos
, или sincos
, чтобы использовать метод приближения CORDIC
или None
.
Можно задать заменяющие записи кода, чтобы заменить эти функции для одной или всех доступных методов вычисления. Например, можно задать запись, чтобы заменить только экземпляры Newton-Raphson
функции rSqrt
.
Чтобы установить алгоритм для функции в определении записи, используйте свойство EntryInfoAlgorithm
в вызове функционального setTflCFunctionEntryParameters
. В следующей таблице перечислены аргументы для определения метода вычисления, чтобы соответствовать во время генерации кода.
Функция | Аргумент |
---|---|
rSqrt |
|
sin cos sincos |
|
Например, чтобы заменить только экземпляры Newton-Raphson
функции rSqrt
, создайте запись можно следующим образом:
Создайте табличный файл определения, который содержит функциональное определение. Например:
function hTable = crl_rsqrt() %CRL_TABLE_RSQRT - Define function entry for code replacement table.
В теле функции составьте таблицу путем вызова функционального RTW.TflTable
.
hTable = RTW.TflTable;
Создайте запись для отображения функции с вызовом функции RTW.TflCFunctionEntry
.
% Create entry for rsqrt function replacement
fcn_entry = RTW.TflCFunctionEntry;
Параметры записи функции множества с вызовом функции setTflCFunctionEntryParameters
.
setTflCFunctionEntryParameters(fcn_entry, ... 'Key', 'rSqrt', ... 'Priority', 80, ... 'ImplementationName', 'rsqrt_newton', ... 'ImplementationHeaderFile', 'rsqrt.h', ... 'EntryInfoAlgorithm', 'RTW_NEWTON_RAPHSON');
Создайте концептуальные аргументы y1
и u1
. Этот пример использует вызовы функции createAndAddConceptualArg
, чтобы создать и добавить аргумент с одним вызовом функции.
createAndAddConceptualArg(fcn_entry, 'RTW.TflArgNumeric', ... 'Name', 'y1', ... 'IOType', 'RTW_IO_OUTPUT', ... 'DataTypeMode', 'double'); createAndAddConceptualArg(e, 'RTW.TflArgNumeric', ... 'Name', 'u1', ... 'DataTypeMode', 'double');
Скопируйте концептуальные аргументы в аргументы реализации. Этот пример использует вызов функции copyConceptualArgsToImplementation
, чтобы создать и добавить аргументы реализации в запись путем копирования соответствия с концептуальными аргументами.
copyConceptualArgsToImplementation(fcn_entry);
Добавьте запись в заменяющую таблицу кода с вызовом функции addEntry
.
addEntry(hTable, fcn_entry);
Сохраните табличный файл определения. Используйте имя табличной функции определения, чтобы назвать файл.
Сгенерированный код для экземпляра Newton-Raphson
функции rSqrt
похож на следующий код:
/* Model step function */ void mrsqrt_step(void) { /* Outport: '<Root>/Out1' incorporates: * Inport: '<Root>/In1' * Sqrt: '<Root>/rSqrtBlk' */ mrsqrt_Y.Out1 = rsqrt_newton(mrsqrt_U.In1); }