coder.replace ФункцияМожно разработать библиотеку замены кода для оптимизации производительности функций MATLAB, содержащих coder.replace функция. Для разработки библиотеки замены кода используйте интерактивный или программный подход. Дополнительные сведения см. в разделе Разработка библиотеки замены кода.
Откройте инструмент замены кода (crtool) в командной строке MATLAB с помощью следующей команды:
>>crtool
Создайте таблицу.
В контекстном меню crtool выберите «Файл» > «Новая таблица».
На правой панели присвойте таблице имя crl_matlab_fcn_coder_replace. Нажмите кнопку «Применить».
Создайте запись. В контекстном меню crtool выберите «Файл» > «Новая запись» > «Функция».
Создание параметров записи. В раскрывающемся списке «Функция» выберите custom. Информация о функциях появляется в crtool. В этом примере укажите параметр как calculate.
Создайте концептуальное представление. Концептуальное представление описывает подпись функции, которую требуется заменить. В подразделе Концептуальная функция crtool укажите возвращаемый аргумент y1 и входной аргумент u1 с двойным типом данных и скалярным типом аргументов.
Создайте представление реализации. Представление реализации описывает сигнатуру функции оптимизации. Для этого примера, чтобы указать, что аргументы реализации имеют тот же порядок и те же свойства, что и концептуальные аргументы, установите флажок Сделать концептуальный и аргумент реализации типами одного и того же типа.
Добавление возвращаемого аргумента y1 и аргументы u1.
Укажите имя для функции замены в разделе Прототип функции.
Укажите сведения о построении. Щелкните вкладку Сведения о построении, чтобы открыть панель требований к построению. Укажите файлы (источник, заголовок, объект), необходимые генератору кода для замены кода. В этом примере нет необходимости указывать информацию о построении.
Проверьте и сохраните таблицу. Перейдите на вкладку «Информация о сопоставлении» и убедитесь, что поля заполнены, как показано на рисунке. Щелкните Проверить запись. В контекстном меню crtool выберите «Файл» > «Сохранить таблицу» > «Сохранить».

Зарегистрируйте библиотеку замены кода. При регистрации создается библиотека, состоящая из указанных таблиц. Выберите «Файл» > «Создать файл регистрации». В диалоговом окне Создать файл регистрации заполните следующие поля:

Чтобы использовать библиотеку замены кода, обновите текущий сеанс MATLAB с помощью команды:
>>sl_refresh_customizations
Проверьте библиотеку замены кода. В командной строке MATLAB откройте библиотеку с помощью средства просмотра замены кода и убедитесь, что таблица и запись указаны правильно. Дополнительные сведения см. в разделе Проверка библиотеки замены кода. Настройте модель так, чтобы она использовала библиотеку замены кода, создавала код и проверяла, что замена происходит так, как ожидалось. Если происходит непредвиденное поведение, проверьте попадание и пропустите журналы, чтобы устранить неполадки.
Откройте программный интерфейс в меню MATLAB, выбрав Создать > Функция.
Создайте таблицу.
Создайте функцию с именем таблицы библиотеки замены кода, которая не имеет аргументов и возвращает объект таблицы. Эту функцию можно использовать для вызова таблицы библиотеки замены кода.
Создание объекта таблицы путем вызова RTW.TflTable.
function hTable = crl_matlab_fcn_coder_replace % Create a function to call the code replacement library table %% Create a table object hTable = RTW.TflTable;
Создайте запись. Поскольку этот пример заменяет функцию, создайте запись замены кода в таблице, вызвав функцию записи. RTW.TflCFunctionEntry.
function hTable = crl_matlab_fcn_coder_replace % Create a function to call the code replacement library table %% Create a table object hTable = RTW.TflTable; %% Create an entry hEntry = RTW.TflCFunctionEntry;
Создание параметров записи. Поскольку эти примеры заменяют функцию, создайте параметры записи, вызвав функцию setTflCFunctionEntryParameters.
function hTable = crl_matlab_fcn_coder_replace % Create a function to call the code replacement library table %% Create a table object hTable = RTW.TflTable; %% Create an entry hEntry = RTW.TflCFunctionEntry; %% Create entry parameters setTflCFunctionEntryParameters(hEntry, ... 'Key', 'calculate', ... 'Priority', 100, ... 'ArrayLayout', 'COLUMN_MAJOR', ... 'ImplementationName', ... 'replacement_calculate_impl', ... 'ImplementationHeaderFile', ... 'replacement_calculate_impl.h', ... 'ImplementationSourceFile', ... 'replacement_calculate_impl.c');
Создайте концептуальное представление. Концептуальное представление описывает подпись функции, которую требуется заменить. Чтобы явно указать свойства аргумента, вызовите функцию getTflArgFromString.
function hTable = crl_matlab_fcn_coder_replace % Create a function to call the code replacement library table %% Create a table object hTable = RTW.TflTable; %% Create an entry hEntry = RTW.TflCFunctionEntry; %% Create entry parameters setTflCFunctionEntryParameters(hEntry, ... 'Key', 'calculate', ... 'Priority', 100, ... 'ArrayLayout', 'COLUMN_MAJOR', ... 'ImplementationName', ... 'replacement_calculate_impl', ... 'ImplementationHeaderFile', ... 'replacement_calculate_impl.h', ... 'ImplementationSourceFile', ... 'replacement_calculate_impl.c'); %% Create the conceptual representation arg = getTflArgFromString(hEntry, 'y1','double'); arg.IOType = 'RTW_IO_OUTPUT'; addConceptualArg(hEntry, arg); arg = getTflArgFromString(hEntry, 'u1','double'); addConceptualArg(hEntry, arg);
Создайте представление реализации. Представление реализации описывает сигнатуру функции оптимизации. Чтобы указать, что аргументы реализации имеют тот же порядок и свойства, что и концептуальные аргументы, вызовите функцию getTflArgFromString.
function hTable = crl_matlab_fcn_coder_replace % Create a function to call the code replacement library table %% Create a table object hTable = RTW.TflTable; %% Create an entry hEntry = RTW.TflCFunctionEntry; %% Create entry parameters setTflCFunctionEntryParameters(hEntry, ... 'Key', 'calculate', ... 'Priority', 100, ... 'ArrayLayout', 'COLUMN_MAJOR', ... 'ImplementationName', ... 'replacement_calculate_impl', ... 'ImplementationHeaderFile', ... 'replacement_calculate_impl.h', ... 'ImplementationSourceFile', ... 'replacement_calculate_impl.c'); %% Create the conceptual representation arg = getTflArgFromString(hEntry, 'y1','double'); arg.IOType = 'RTW_IO_OUTPUT'; addConceptualArg(hEntry, arg); arg = getTflArgFromString(hEntry, 'u1','double'); addConceptualArg(hEntry, arg); %% Create the Conceptual Representation arg = getTflArgFromString(hEntry, 'y1','double'); arg.IOType = 'RTW_IO_OUTPUT'; hEntry.Implementation.setReturn(arg); arg = getTflArgFromString(hEntry, 'u1','double'); hEntry.Implementation.addArgument(arg); %% Add the entry to the table hTable.addEntry(hEntry);
Укажите сведения о построении. В параметрах ввода укажите файлы (заголовок, источник, объект), необходимые генератору кода для замены кода. Для этого примера информация о построении не требуется.
Проверьте и сохраните файл настройки. В меню MATLAB сохраните этот файл настройки, выбрав «Файл» > «Сохранить». В командной строке проверьте таблицу библиотеки замены кода, вызвав ее:
>> hTable = crl_matlab_fcn_coder_replace
Зарегистрируйте библиотеку замены кода. Регистрация создает библиотеку замены кода, определяя имя библиотеки, таблицы замены кода и другую информацию. Создайте файл регистрации с помощью следующих спецификаций:
function rtwTargetInfo(cm) cm.registerTargetInfo(@loc_register_crl); end function this = loc_register_crl this(1) = RTW.TflRegistry; this(1).Name = 'CRL for matlab function with custom code using coder.replace’; this(1).TableList = {'crl_matlab_fcn_coder_replace.m'}; % table created in this example this(1).TargetHWDeviceType = {'*'}; this(1).Description = 'Example code replacement library'; end
Чтобы использовать библиотеку замены кода, обновите текущий сеанс MATLAB с помощью команды:
>>sl_refresh_customizations
Проверьте библиотеку замены кода. В командной строке MATLAB откройте библиотеку с помощью средства просмотра замены кода и убедитесь, что таблица и запись указаны правильно. Дополнительные сведения см. в разделе Проверка библиотеки замены кода. Настройте модель так, чтобы она использовала библиотеку замены кода, создавала код и проверяла, что замена происходит так, как ожидалось. Если происходит непредвиденное поведение, проверьте попадание и пропустите журналы, чтобы устранить неполадки.