Задайте заменяющую оптимизацию библиотеки кода

Заменяющая библиотека кода содержит одну или несколько заменяющих таблиц кода. Каждая таблица содержит одну или несколько заменяющих записей кода. Каждая запись содержит параметры отображения и записи. Запись сопоставляет концептуальное представление автоматически сгенерированного MATLAB или функции Simulink к представлению реализации оптимизированного C или функции C++. Параметры записи описывают дополнительные свойства для генератора кода, чтобы соблюдать во время замены кода.

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

Интерактивные и программируемые подходы оба выполняют эти 8 шагов:

  1. Откройте среду.

  2. Составление таблицы.

  3. Создайте запись.

  4. Создайте параметры записи.

  5. Создайте концептуальное представление.

  6. Создайте представление реализации.

  7. Укажите информацию сборки.

  8. Подтвердите и сохраните.

В интерактивном режиме разработайте заменяющую библиотеку кода

  1. Откройте среду.

    Чтобы в интерактивном режиме создать заменяющую библиотеку кода, откройте Code Replacement Tool (crtool) из командной строки MATLAB с командой:

    >> crtool 
  2. Составление таблицы.

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

    Составлять заменяющую таблицу кода:

    1. В crtool меню выберите File> New table.

    2. На правой панели назовите таблицу и нажмите Apply.

  3. Создайте запись.

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

    Чтобы создать заменяющую запись кода, используйте один из этих методов:

    • От crtool панели инструментов кликните по значку entry-type выбирание entry-type.

    • В crtool меню выберите File> New entry> entry-type.

    • Щелкните правой кнопкой по таблице и выберите New entry> entry-type.

    Новая запись появляется без имени в средней панели.

  4. Создайте параметры записи.

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

    Создать параметры записи:

    • В Function или Operation выпадающий список, выберите имя функции, которое вы хотите заменить.

    Этот выбор определяет параметры записи, которые появляются в crtool.

  5. Создайте концептуальное представление.

    Концептуальное представление описывает подпись функции, которую вы хотите заменить. Концептуальное представление состоит из имени функции, возвращаемых аргументов и параметров. Возвращаемые аргументы упоминаются как выходные аргументы, и параметры упоминаются как входные параметры. Задайте каждый концептуальный аргумент с именем, типом ввода-вывода, и, в зависимости от типа замены, другие свойства, которые появляются в crtool.

    Задавать ваше концептуальное представление:

    • В Conceptual Function или подразделе Conceptual Operation crtool, задайте аргументы ввода и вывода функции, которую вы хотите, чтобы генератор кода заменил.

  6. Создайте представление реализации.

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

    Задавать ваше представление реализации:

    • В Implementation Function или подразделе Operation Function crtool, задайте аргументы ввода и вывода для оптимизированной функции, определяемой в заменяющей библиотеке кода.

  7. Укажите информацию сборки.

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

    Указать информацию сборки:

    • В crtool кликните по вкладке Build Information, чтобы открыть панель Requirements сборки. Укажите необходимую информацию сборки в этих полях:

    ПараметрОписание
    Заголовочный файл реализацииИмя заголовочного файла необходимо для замены кода.
    Исходный файл реализацииИмя исходного файла необходимо для замены кода.
    Дополнительный заголовок регистрирует/включает путиИмя или путь дополнительных заголовочных файлов необходимы для замены кода.
    Дополнительные исходные файлы/путиИмя или путь дополнительных исходных файлов необходимы для замены кода.
    Дополнительные объектные файлы/путиИмя или путь дополнительных объектных файлов необходимы для замены кода.
    Дополнительные флаги ссылкиФлаги компоновщик должны сгенерировать исполняемый файл для заменяющего кода.
    Дополнительные флаги компиляцииФлаги компилятор должны сгенерировать объектный код для заменяющего кода.
    Скопируйте файлы в каталог сборкиФлаги, скопировать ли заголовок, источник или объектные файлы, которые требуются, чтобы генерировать заменяющий код к папке сборки перед генерацией кода. Если вы указываете, что файлы с Дополнительным заголовком регистрируют/включают пути или Дополнительные исходные файлы / пути, и вы копируете файлы, компилятор и утилиты, такие как packNGo могут найти дублирующиеся экземпляры файлов.
  8. Подтвердите и сохраните.

    Сохраните свою заменяющую библиотеку кода с тем же именем как ваша заменяющая таблица кода на вашем пути MATLAB. Сохранение автоматически вашей библиотеки подтверждает неподтвержденное содержимое.

    Подтвердить и сохранить вашу библиотеку:

    • В crtool меню выберите File> Save Table> Save.

Программно разработайте заменяющую библиотеку кода

  1. Откройте среду.

    Чтобы программно создать заменяющую библиотеку кода, откройте файл функции MATLAB. Из MATLAB меню выбирают New> Function.

  2. Составление таблицы.

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

    Составлять заменяющую таблицу кода:

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

    2. Создайте объект таблицы с вызовом RTW.TflTable.

    function hTable = code_replacement_library_table()
    % Create a function to call code replacement library table
    
    %% Create a code replacement library table object
    hTable = RTW.TflTable;
     
    end
    
  3. Создайте запись.

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

    Составлять заменяющую таблицу кода:

    1. Идентифицируйте тип функции, которую вы хотите заменить.

    2. Вызовите соответствующую Функцию Записи, чтобы создать запись в вашей таблице.

    Тип функции вы хотите заменитьФункция записи
    ОперацияRTW.TflCOperationEntry
    ФункцияRTW.TflCFunctionEntry
    Операция BLASRTW.TflBlasEntryGenerator
    Операция CBLASRTW.TflCBlasEntryGenerator
    Операции сложения фиксированной точки и операции вычитанияRTW.TflCOperationEntryGenerator
    Сетевая наклонная операция фиксированной точкиRTW.TflCOperationEntryGenerator_NetSlope
    Семафор или взаимное исключениеRTW.TflCSemaphoreEntry
    Пользовательская функцияRTW.TflCFunctionEntry
    Пользовательская операция RTW.TflCOperationEntryML
    function hTable = code_replacement_library_table()
    % Create a function to call code replacement library table
    
    %% Create a code replacement library table object
    hTable = RTW.TflTable;
    
    %% Create a code replacement library entry
    % Pick one from list below
    hEntry = RTW.TFLCOperationEntry;
    hEntry = RTW.TflCFunctionEntry;
    hEntry = RTW.TflBlasEntryGenerator;
    hEntry = RTW.TflCBlasEntryGenerator;
    hEntry = RTW.TflCOperationEntryGenerator;
    hEntry = RTW.TflCOperationEntryGenerator_NetSlope;
    hEntry = RTW.TflCSemaphoreEntry;
    hEntry = RTW.TflCFunctionEntryML;
    hEntry = RTW.TflCOperationEntryML;
    
    end
    
  4. Создайте параметры записи.

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

    Создать ваши параметры записи:

    • Вызовите функцию Параметров Набора, которая соответствует типу функции, которую вы хотите заменить идентифицированный на предыдущем шаге (шаг 3).

      Тип функции вы хотите заменитьУстановите функцию Параметров
      Математическая операция, операция BLAS, операция CBLAS, Фиксированная точка, Сетевая Наклонная Фиксированная точка, операция CustomsetTflCOperationEntryParameters
      Функция, Пользовательская функцияsetTflCFunctionEntryParameters
      Семафор или взаимное исключениеsetTflCSemaphoreEntryParameters

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

      function hTable = code_replacement_library_table()
      % Create a function to call code replacement library table
      
      %% Create a code replacement library table object
      hTable = RTW.TflTable;
      
      %% Create a code replacement library entry
      % Pick one from list below
      hEntry = RTW.TFLCOperationEntry;
      hEntry = RTW.TflCFunctionEntry;
      hEntry = RTW.TflBlasEntryGenerator;
      hEntry = RTW.TflCBlasEntryGenerator;
      hEntry = RTW.TflCOperationEntryGenerator;
      hEntry = RTW.TflCOperationEntryGenerator_NetSlope;
      hEntry = RTW.TflCSemaphoreEntry;
      hEntry = RTW.TflCFunctionEntryML;
      hEntry = RTW.TflCOperationEntryML;
      
      %% Create entry parameters
      % Pick one from list below
      hEntry.setTflCOperationEntryParameters(...        
              'Key',                          ' ', ...
              'Priority',                     100, ...
              'AcceptExprInput',              true, ...
              'AdditionalHeaderFiles',        {}, ...
              'AdditionalIncludePaths',       {}, ...
              'AdditionalLinkObjs',           {}, ...
              'AdditionalLinkObjsPaths',      {}, ...
              'AdditionalSourceFiles',        {}, ...
              'AdditionalSourcePaths',        {}, ...
              'AdditionalCompileFlags',       {}, ...
              'AdditionalLinkFlags',          {}, ...
              'AllowShapeAgnostic',           false, ...
              'ArrayLayout',                  'COLUMN_MAJOR', ...
              'EntryInfoAlgorithm',           'RTW_CAST_BEFORE_OP', ...
              'GenCallback',                  ' ', ...
              'ImplementationHeaderFile',     ' ', ...
              'ImplementationHeaderPath',     ' ', ...
              'ImplementationName',           ' ', ...
              'ImplementationSourceFile',     ' ', ...
              'ImplementationSourcePath',     ' ', ...
              'ImplType',                     'FCN_IMPL_FUNCT', ...
              'MustHaveZeroNetBias',          false, ...
              'NetFixedExponet',              0, ...
              'NetAdjustmentFactor', 1,       ...
              'RoundingModes',                'RTW_ROUND_UNSPECIFIED', ...
              'SaturationMode',               'RTW_SATURATE_UNSPECIFIED', ...
              'SideEffects',                  false, ...
              'SlopesMustBeTheSame',          false, ...
              'StoreFcnReturnInLocalVar',     false);
          
      hEntry.setTflCFunctionEntryParameters(...
              'Key',                          ' ', ...
              'Priority',                     100, ...
              'AcceptExprInput',              true, ...
              'AdditionalHeaderFiles',        {}, ...
              'AdditionalIncludePaths',       {}, ...
              'AdditionalLinkObjs',           {}, ...
              'AdditionalLinkObjsPaths',      {}, ...
              'AdditionalSourceFiles',        {}, ...
              'AdditionalSourcePaths',        {}, ...
              'AdditionalCompileFlags',       {}, ...
              'AdditionalLinkFlags',          {}, ...
              'ArrayLayout',                  'COLUMN_MAJOR', ...
              'EntryInfoAlgorithm',           'RTW_DEFAULT', ...
              'GenCallback',                  ' ', ...
              'ImplementationHeaderFile',     ' ', ...
              'ImplementationHeaderPath',     ' ', ...
              'ImplementationName',           ' ', ...
              'ImplementationSourceFile',     ' ', ...
              'ImplementationSourcePath',     ' ', ...
              'ImplType',                     'FCN_IMPL_FUNCT', ...
              'RoundingModes',                'RTW_ROUND_UNSPECIFIED', ...
              'SaturationMode',               'RTW_SATURATE_UNSPECIFIED', ...
              'SideEffects',                  false, ...
              'StoreFcnReturnInLocalVar',     false);
          
      hEntry.setTflCSemaphoreEntryParameters(...       
              'Key',                          ' ', ...
              'Priority',                     100, ...
              'AcceptExprInput',              true, ...
              'AdditionalHeaderFiles',        {}, ...
              'AdditionalIncludePaths',       {}, ...
              'AdditionalLinkObjs',           {}, ...
              'AdditionalLinkObjsPaths',      {}, ...
              'AdditionalSourceFiles',        {}, ...
              'AdditionalSourcePaths',        {}, ...
              'AdditionalCompileFlags',       {}, ...
              'AdditionalLinkFlags',          {}, ....
              'GenCallback',                  ' ', ...
              'ImplementationHeaderFile',     ' ', ...
              'ImplementationHeaderPath',     ' ', ...
              'ImplementationName',           ' ', ...
              'ImplementationSourceFile',     ' ', ...
              'ImplementationSourcePath',     ' ', ...
              'ImplType',                     'FCN_IMPL_FUNCT', ...
              'RoundingModes',                'RTW_ROUND_UNSPECIFIED', ...
              'SaturationMode',               'RTW_SATURATE_UNSPECIFIED', ...
              'SideEffects',                  false, ...
              'StoreFcnReturnInLocalVar',     false);
       
      end
      
  5. Создайте концептуальное представление.

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

    Необходимые свойства:

    • Имя- Заданный как y1.. yn для выходных аргументов и u1.. ООН для входных параметров

    • I/O type - Заданный как RTW_IO_OUTPUT или RTW_IO_INPUT

    Чтобы задать ваше концептуальное представление, используйте один из этих подходов:

    ПодходФункцияЦель
    1createAndAddConceptualArg

    Индивидуальная настройка и управление.

    Если вы хотите явным образом задать аргументы как скаляр или матрицу и другие свойства.

    2getTflArgFromString

    Быстрое прототипирование.

    Если вы хотите быстро задать аргументы со встроенными типами данных.

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

    function hTable = code_replacement_library_table()
    % Create a function to call code replacement library table
    
    %% Create a code replacement library table object
    hTable = RTW.TflTable;
    
    %% Create a code replacement library entry
    % Pick one from list below
    hEntry = RTW.TFLCOperationEntry;
    hEntry = RTW.TflCFunctionEntry;
    hEntry = RTW.TflBlasEntryGenerator;
    hEntry = RTW.TflCBlasEntryGenerator;
    hEntry = RTW.TflCOperationEntryGenerator;
    hEntry = RTW.TflCOperationEntryGenerator_NetSlope;
    hEntry = RTW.TflCSemaphoreEntry;
    hEntry = RTW.TflCFunctionEntryML;
    hEntry = RTW.TflCOperationEntryML;
    
    %% Create entry parameters
    % Pick one from list below
    % To view properties, see step 4 
    hEntry.setTflCOperationEntryParameters( );
    hEntry.setTflCFunctionEntryParameters( );
    hEntry.setTflCSemaphoreEntryParameters( );
    
    %% Create the conceptual representation
    
    % Approach 1: createAndAddConceptualArg
    % arg = createAndAddConceptualArg(hEntry, argType, varargin)
    % argType - 'RTW.TflArgNumeric' | 'RTW.TflArgMatrix'
    % varargin - 'name', 'value' pairs shown below set to default values,
    % includes name and I/O type
    
    % Define Output Arguments
    hEntry.createAndAddConceptualArg(...
            'RTW.TflArgNumeric',            ...
            'Name',                         'y1', ... 
            'IOType',                       'RTW_IO_OUTPUT', ... 
            'IsSigned',                     true, ...
            'WordLength',                   32, ...
            'CheckSlope',                   true, ...
            'CheckBias',                    true, ...
            'DataTypeMode',                 'Fixed-point:binary point scaling', ...
            'DataType',                     'Fixed', ...
            'Scaling',                      'BinaryPoint', ...
            'Slope',                        1, ...
            'SlopeAdjustmentFactor',        1.0, ...
            'FixedExponent',                -15, ...
            'Bias',                         0.0, ...
            'FractionLength',               15, ...
            'BaseType',                     'double', ...
            'DimRange',                     [2,2]);
    
    % Define Input Arguments
    hEntry.createAndAddConceptualArg(...
            'RTW.TflArgNumeric',            ...
            'Name',                         'u1', ...
            'IOType',                       'RTW_IO_OUTPUT', ...
            'IsSigned',                     true, ...
            'WordLength',                   32, ...
            'CheckSlope',                   true, ...
            'CheckBias',                    true, ...
            'DataTypeMode',                 'Fixed-point:binary point scaling', ...
            'DataType',                     'Fixed', ...
            'Scaling',                      'BinaryPoint', ...
            'Slope',                        1, ...
            'SlopeAdjustmentFactor',        1.0, ...
            'FixedExponent',                -15, ...
            'Bias',                         0.0, ...
            'FractionLength',               15, ...
            'BaseType',                     'double', ...
            'DimRange',                     [2,2]);
    
    
    % Approach 2: getTflArgFromString
    % arg = getTflArgFromString(hEntry, name, I/O type)
    % name- y1..yn | u1..un
    % I/O type- RTW_IO_OUTPUT | RTW_IO_INPUT
    
    % Define Output Arguments
    arg = getTflArgFromString('y1', 'double');
    arg.IOType = 'RTW_IO_OUTPUT';
    hEntry.addConceptualArg(arg);
    
    % Define Input Arguments
    arg = getTflArgFromString('u1', 'double');
    arg.IOType = 'RTW_IO_INPUT';
    hEntry.addConceptualArg(arg);
    
    end
    
  6. Создайте представление реализации.

    Представление реализации описывает подпись заменяющей функции, определяемой заменяющей библиотекой кода. Это состоит из имени функции, возвращаемых аргументов и параметров. Задайте аргументы реализации с типом, введите спецификатор и сложность. После того, как вы зададите свое представление реализации, добавьте свою завершенную запись в заменяющую таблицу кода с вызовом функционального addEntry.

    Чтобы задать ваше представление реализации, используйте один из этих подходов:

    ПодходФункцияЦель
    1copyConceptualArgsToImplementation

    Идентичные аргументы.

    Задайте аргументы реализации, и концептуальные аргументы имеют те же свойства.

    2createAndAddImplementationArgcreateAndSetCImplementationReturn

    Тот же порядок, различные свойства.

    Укажите, что аргументы реализации имеют тот же порядок в качестве концептуальных аргументов, но имеют различные свойства.

    3getTflArgFromString

    Добавьте постоянное значение.

    Задайте аргументы реализации с постоянным значением.

    4getTflDWorkFromString

    Замена взаимного исключения/Семафора.

    Задайте аргументы реализации для взаимного исключения или семафорных функций.

    5createCRLEntry

    Создайте запись с одной функцией.

    Объявите и задайте заменяющую запись таблицы кода (концептуальный и аргументы реализации) в одной функции.

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

    function hTable = code_replacement_library_table()
    % Create a function to call code replacement library table
    
    %% Create a code replacement library table object
    hTable = RTW.TflTable;
    
    %% Create a code replacement library entry
    % Pick one from list below
    hEntry = RTW.TFLCOperationEntry;
    hEntry = RTW.TflCFunctionEntry;
    hEntry = RTW.TflBlasEntryGenerator;
    hEntry = RTW.TflCBlasEntryGenerator;
    hEntry = RTW.TflCOperationEntryGenerator;
    hEntry = RTW.TflCOperationEntryGenerator_NetSlope;
    hEntry = RTW.TflCSemaphoreEntry;
    hEntry = RTW.TflCFunctionEntryML;
    hEntry = RTW.TflCOperationEntryML;
    
    %% Create entry parameters
    % Pick one from list below
    % To view properties, see step 4
    hEntry.setTflCOperationEntryParameters( );
    hEntry.setTflCFunctionEntryParameters( );
    hEntry.setTflCSemaphoreEntryParameters( );
    
    %% Create the conceptual representation
    
    % Approach 1: createAndAddConceptualArg
    % arg = createAndAddConceptualArg(hEntry, argType, varargin)
    % argType - 'RTW.TflArgNumeric' | 'RTW.TflArgMatrix'
    % varargin - 'name', 'value' pairs shown below set to default values,
    % includes name and I/O type, to view properties, see step 5
    
    % Define Output Arguments
    hEntry.createAndAddConceptualArg( );
    
    % Define Input Arguments
    hEntry.createAndAddConceptualArg( );
    
    
    
    % Approach 2: getTflArgFromString
    % arg = getTflArgFromString(hEntry, name, I/O type)
    % name- y1..yn | u1..un
    % I/O type- RTW_IO_OUTPUT | RTW_IO_INPUT
    
    % Define Output Arguments
    arg = getTflArgFromString('y1', 'double');
    arg.IOType = 'RTW_IO_OUTPUT';
    hEntry.addConceptualArg(arg);
    
    % Define Input Arguments
    arg = getTflArgFromString('u1', 'double');
    arg.IOType = 'RTW_IO_INPUT';
    hEntry.addConceptualArg(arg);
    
    
    
    %% Create the implementation representation
    
    % Approach 1: copyConceptualArgsToImplementation
    copyConceptualArgsToImplementation(hEntry);
    
    
    % Approach 2: createAndSetCImplementation, createAndSetCImplementationArg
    % arg = createAndAddImplementation(hEntry, argType,varargin),
    % arg = createAndSetCImplementationReturn(hEntry, argType,varargin)
    % argType - 'RTW.TflArgNumeric' | 'RTW.TflArgMatrix'
    % varargin - 'name', 'value' pairs shown below set to default values,
    % includes name and I/O type
    
    % Define Output Arguments
    hEntry.createAndSetCImplementationReturn(...
            'RTW.TflArgNumeric',            ...
            'Name',                         'y1', ...
            'IOType',                       'RTW_IO_Output', ...
            'IsSigned',                     true, ...
            'WordLength',                   16, ...
            'DataTypeMode',                 'Fixed-point:binary point scaling', ...
            'DataType',                     'Fixed', ...
            'Scaling',                      'BinaryPoint', ...
            'Slope',                        1.0, ...
            'SlopeAdjustmentFactor',        1.0, ...
            'FixedExponent',                -15, ...
            'Bias',                         0.0, ...
            'FractionLength',               15, ...
            'Value',                        0);
        
    % Define Input Arguments
    hEntry.createAndAddImplementationArg(...
            'RTW.TflArgNumeric',            ...
            'Name',                         'y1', ...
            'IOType',                       'RTW_IO_Output', ...
            'IsSigned',                     true, ...
            'WordLength',                   16, ...
            'DataTypeMode',                 'Fixed-point:binary point scaling', ...
            'DataType',                     'Fixed', ...
            'Scaling',                      'BinaryPoint', ...
            'Slope',                        1.0, ...
            'SlopeAdjustmentFactor',        1.0, ...
            'FixedExponent',                -15, ...
            'Bias',                         0.0, ...
            'FractionLength',               15, ...
            'Value',                        0);
     
    
    
    % Approach 3: getTflArgFromString
    % arg = getTflArgFromString(hEntry, name, datatype)
    % name- y1..yn | u1..un, datatype - built-in data type
    
    % Define Output arguments
    arg = getTflArgFromString(hEntry, 'y1', 'double');
    arg.IOType = 'RTW_IO_OUTPUT';
    hEntry.Implementation.setReturn(arg);
    
    % Define Input arguments
    arg = getTflArgFromString(hEntry, 'u1', 'double', 0);
    hEntry.Implementation.addArgument(arg);
    
    
    
    % Approach 4: getTflDWorkFromString
    % arg = getTflDWorkFromString(hEntry, name, datatype)
    
    % Define arguments
    arg = getTflDWorkFromString('d1', 'void*');
    hEntry.addDWorkArg(arg);
    
    
    
    % Approach 5: createCRLEntry
    % tableEntry = createCRLEntry(crTable,conceptualSpecification,implementationSpecification)
    
    % Define code replacement conceptual and implementation arguments
    hEntry = createCRLEntry(...
            hTable, ...
            'conceptualSpecification', ...
            'implementationSpecification');
    
    
    %% Add code replacement library entry to table
    hTable.addEntry(hEntry);
    
    end
    
  7. Укажите информацию сборки.

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

    Указать информацию сборки:

    • Задайте свои параметры сборки в функции Параметров Записи, которую вы задали на шаге 5. Укажите информацию сборки со следующими свойствами:

    ПараметрОписание

    Заголовочный файл реализации

    Установите свойства ImplementationHeaderFile и ImplementationHeaderPath.

    Имя заголовочного файла необходимо для замены кода.

    Исходный файл реализации

    Установите свойства ImplementationSourceFile и ImplementationSourcePath.

    Имя исходного файла необходимо для замены кода.

    Дополнительный заголовок регистрирует/включает пути

    Для каждого файла задайте имя файла и путь в вызовах функций addAdditionalHeaderFile и addAdditionalIncludePath.

    Имя или путь дополнительных заголовочных файлов необходимы для замены кода.

    Дополнительные исходные файлы/пути

    Для каждого файла задайте имя файла и путь в вызовах функций addAdditionalSourceFile и addAdditionalSourcePath.

    Имя или путь дополнительных исходных файлов необходимы для замены кода.

    Дополнительные объектные файлы/пути

    Для каждого файла задайте имя файла и путь в вызовах функций addAdditionalLinkObj и addAdditionalLinkObjPath.

    Имя или путь дополнительных объектных файлов необходимы для замены кода.

    Дополнительные флаги ссылки

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

    Флаги компоновщик должны сгенерировать исполняемый файл для заменяющего кода.

    Дополнительные флаги компиляции

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

    Флаги компилятор должны сгенерировать объектный код для заменяющего кода.

    Скопируйте файлы в каталог сборки.

    Установите свойство GenCallback к 'RTW.copyFileToBuildDir'.

    Если соответствие происходит для записи таблицы, вызова функционального RTW.copyFileToBuildDir копии потребовали файлов к папке сборки.

    Если вы указываете, что дополнительный заголовок регистрирует/включает пути или дополнительные исходные файлы/пути, и вы копируете файлы, компилятор и утилиты, такие как packNGo может найти дублирующиеся экземпляры файлов.

    Флаги, скопировать ли заголовок, источник или объектные файлы, которые требуются, чтобы генерировать заменяющий код к папке сборки перед генерацией кода. Если вы указываете, что файлы с Дополнительным заголовком регистрируют/включают пути или Дополнительные исходные файлы / пути, и вы копируете файлы, компилятор и утилиты, такие как packNGo могут найти дублирующиеся экземпляры файлов.
    • Если запись использует заголовок, источник или объектные файлы, рассмотрите, сделать ли файлы доступными для генератора кода. Можно скопировать файлы в папку сборки, или можно задать отдельные имена файлов и пути явным образом.

    • Если вы указываете, что дополнительный заголовок регистрирует/включает пути или исходные файлы/пути, и вы копируете файлы, компилятор и утилиты, такие как packNGo может найти дублирующиеся экземпляры файлов (экземпляр в папке сборки и экземпляр в исходной папке).

    • Если вы принимаете решение скопировать файлы в папку сборки, и вы используете packNGo функция, чтобы переместить файлы статического и сгенерированного кода к другой среде разработки:

      • В вызове packNGo, задайте пару значения свойства 'minimalHeaders' true (значение по умолчанию). Та установка дает функции команду включать минимальные заголовочные файлы, требуемые создавать код в zip-файле.

      • Не располагайте файлы, которые вы копируете с файлами, которые вы не копируете. Если packNGo функция находит несколько экземпляров того же файла, функция возвращает ошибку.

    • Если вы используете интерфейс программирования, пути, которые вы задаете, могут включать лексемы. Лексема является переменной, заданной как вектор символов, массив ячеек из символьных векторов или массив строк в рабочей области MATLAB®, которую вы заключаете со знаками доллара ($variable$). Генератор кода оценивает и заменяет лексему на заданное значение. Например, считайте путь $myfolder$\folder1, где myfolder вектор символов или скалярная переменная строки, заданная в рабочем пространстве MATLAB как 'd:\work\source\module1'. Генератор кода генерирует пользовательский путь как d:\work\source\module1\folder1.

  8. Подтвердите и сохраните.

    Сохраните свой заменяющий файл настройки библиотеки кода с тем же именем как ваша заменяющая таблица библиотеки кода на вашем пути MATLAB.

    Сохранить и подтвердить вашу библиотеку:

    1. Сохраните свой файл. В меню MATLAB выберите File> Save.

    2. Подтвердите свою библиотеку путем вызова его из командной строки MATLAB. Например:

      >> hTable = code_replacement_library_table()

Похожие темы