Этот пример показывает, как задать заменяющее отображение кода для неличных служебных функций.
Создайте табличный файл определения, который содержит функциональное определение. Например:
function hTable = crl_table_nonfinite()
В теле функции составьте таблицу путем вызова функционального RTW.TflTable
.
hTable = RTW.TflTable;
Создайте записи для функциональных отображений. Чтобы минимизировать размер этой функции, пример использует локальную функцию, locAddFcnEnt
, к строкам кода группы, повторенным для каждой записи. Вызов функции RTW.TflCFunctionEntry
создает запись для набора определений записи локальной функции.
%% Create entries for nonfinite utility functions % locAddFcnEnt(hTable, key, implName, out, in1, hdr) locAddFcnEnt(hTable, 'getNaN', 'getNaN', 'double', 'void', 'nonfin.h'); locAddFcnEnt(hTable, 'getNaN', 'getNaNF', 'single', 'void', 'nonfin.h'); locAddFcnEnt(hTable, 'getInf', 'getInf', 'double', 'void', 'nonfin.h'); locAddFcnEnt(hTable, 'getInf', 'getInfF', 'single', 'void', 'nonfin.h'); locAddFcnEnt(hTable, 'getMinusInf', 'getMinusInf', 'double', 'void', 'nonfin.h'); locAddFcnEnt(hTable, 'getMinusInf', 'getMinusInfF', 'single', 'void', 'nonfin.h'); %% Local Function function locAddFcnEnt(hTable, key, implName, out, in1, hdr) if isempty(hTable) return; end fcn_entry = RTW.TflCFunctionEntry;
Параметры записи функции множества с вызовом функции setTflCFunctionEntryParameters
.
setTflCFunctionEntryParameters(fcn_entry, ... 'Key', key, ... 'Priority', 90, ... 'ImplementationName', implName, ... 'ImplementationHeaderFile', hdr);
Создайте концептуальные аргументы y1
и u1
. Существует несколько способов настроить концептуальные аргументы. Этот пример использует вызовы getTflArgFromString
и функций addConceptualArg
, чтобы создать и добавить аргументы.
arg = getTflArgFromString(hTable, 'y1', out); arg.IOType = 'RTW_IO_OUTPUT'; addConceptualArg(fcn_entry, arg); arg = getTflArgFromString(hTable, 'u1', in1); addConceptualArg(fcn_entry, arg);
Скопируйте концептуальные аргументы в аргументы реализации. Существует несколько способов настроить аргументы реализации. Этот пример использует вызов функции copyConceptualArgsToImplementation
, чтобы создать и добавить аргументы реализации в запись путем копирования соответствия с концептуальными аргументами.
copyConceptualArgsToImplementation(fcn_entry);
Добавьте запись в заменяющую таблицу кода с вызовом функции addEntry
.
addEntry(hTable, fcn_entry);
Сохраните табличный файл определения. Используйте имя табличной функции определения, чтобы назвать файл.
Протестировать этот пример:
Укажите заменяющее отображение кода.
Создайте модель, которая использует неличную функцию. Например, создайте модель, которая включает блок Math Function, который установлен в функцию rem
. Например:
Сконфигурируйте модель со следующими настройками:
На панели Solver выберите решатель фиксированного шага.
На панели Code Generation выберите ERT-based system target file.
На Code Generation> панель Interface, выберите заменяющую библиотеку кода, которая содержит вашу запись функции памяти, и выберите Support: non-finite numbers.
В Model Explorer сконфигурируйте Signal Attributes для исходных блоков Constant
и In1
. Для каждого исходного блока, набор Data type к double
. Примените изменения. Сохраните модель.
Сгенерируйте код и отчет генерации кода.
Рассмотрите замены кода.