exponenta event banner

Преобразования типов данных и замена кода оператора

Записи замены кода можно использовать для замены кода, создаваемого генератором кода для операций преобразования (приведения) типа данных. Для разработки библиотеки замены кода используйте интерактивный или программный подход. Дополнительные сведения см. в разделе Разработка библиотеки замены кода.

Интерактивная разработка библиотеки замены кода

  1. Откройте инструмент замены кода (crtool) в командной строке MATLAB и введите:

    >>crtool
  2. Создайте таблицу.

    1. В контекстном меню crtool выберите «Файл» > «Новая таблица».

    2. На правой панели присвойте таблице имя crl_table_cast_int32_to_int16. Нажмите кнопку «Применить».

  3. Создание параметров записи. В раскрывающемся списке «Операция» выберите Cast.

  4. Создайте запись. В контекстном меню «crtool» выберите «File» > «New entry» > «Fixed Point Net Slope Operation».

  5. Создайте концептуальное представление. Концептуальное представление описывает подпись функции, которую требуется заменить. В подразделе «Концептуальная функция» crtool укажите возвращаемый аргумент. y1 с типом данных int16 и входной аргумент, u1 с типом данных int32 и тип аргумента Scalar.

  6. Создайте представление реализации. Представление реализации описывает сигнатуру функции оптимизации. Для этого примера, чтобы указать, что аргументы реализации имеют тот же порядок и те же свойства, что и концептуальные аргументы, установите флажок Сделать концептуальный и аргумент реализации типами одного и того же типа. В подразделе Function arguments crtool укажите возвращаемый аргумент, y1и входной аргумент, u1 с типом данных int16 и int32.

    Укажите имя для функции замены в разделе Прототип функции.

  7. Укажите сведения о построении. Щелкните вкладку Сведения о построении, чтобы открыть панель требований к построению. Укажите файлы (источник, заголовок, объект), необходимые генератору кода для замены кода. В этом примере нет необходимости указывать информацию о построении.

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

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

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

    >>sl_refresh_customizations

  10. Проверьте библиотеку замены кода. В командной строке MATLAB откройте библиотеку с помощью средства просмотра замены кода и убедитесь, что таблица и запись указаны правильно. Дополнительные сведения см. в разделе Проверка библиотеки замены кода. Настройте модель так, чтобы она использовала библиотеку замены кода, создавала код и проверяла, что замена происходит так, как ожидалось. Если происходит непредвиденное поведение, проверьте попадание и пропустите журналы, чтобы устранить неполадки.

Программная разработка библиотеки замены кода

  1. Откройте программный интерфейс в меню MATLAB, выбрав Создать > Функция.

  2. Создайте таблицу.

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

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

    function hTable = crl_table_cast_int32_to_int16()
    % Create a function to call the code replacement library table 
    
    %% Create a table object
    hTable = RTW.TflTable;
    
  3. Создайте запись. Поскольку этот пример заменяет функцию, создайте запись замены кода в таблице, вызвав функцию записи. RTW.TflCOperationEntry.

    function hTable = crl_table_cast_int32_to_int16()
    % Create a code replacement library table 
    
    %% Create a table object
    hTable = RTW.TflTable;
    
    %% Create an entry
    hEntry = RTW.TflCOperationEntry;
    
  4. Создание параметров записи. Поскольку эти примеры заменяют функцию, создайте параметры записи, вызвав функцию setTflCOperationEntryParameters. Параметры определяют тип операции в виде литья, режим насыщения в виде насыщения при целочисленном переполнении, режимы округления в сторону отрицательной бесконечности и имя функции замещения в виде my_sat_cast.

    function hTable = crl_table_cast_int32_to_int16()
    % Create a code replacement library table 
    
    %% Create a table object
    hTable = RTW.TflTable;
    
    %% Create an entry
    hEntry = RTW.TflCOperationEntry;
    
    %% Create entry parameters
    hEntry.setTflCOperationEntryParameters(...
        'Key',                      'RTW_OP_CAST', ...
        'Priority',                 50, ...
        'ImplementationName',       'my_sat_cast', ...
        'SaturationMode',           'RTW_SATURATE_ON_OVERFLOW', ...
        'RoundingModes',            {'RTW_ROUND_FLOOR'}, ...
        'ImplementationHeaderFile', 'some_hdr.h', ...
        'ImplementationSourceFile', 'some_hdr.c');
  5. Создайте концептуальное представление. Концептуальное представление описывает подпись функции, которую требуется заменить. Чтобы явно указать свойства аргумента, вызовите функцию getTflArgFromString.

    function hTable = crl_table_cast_int32_to_int16()
    % Create a code replacement library table 
    
    %% Create a table object
    hTable = RTW.TflTable;
    
    %% Create an entry
    hEntry = RTW.TflCOperationEntry;
    
    %% Create entry parameters
    hEntry.setTflCOperationEntryParameters(...
        'Key',                      'RTW_OP_CAST', ...
        'Priority',                 50, ...
        'ImplementationName',       'my_sat_cast', ...
        'SaturationMode',           'RTW_SATURATE_ON_OVERFLOW', ...
        'RoundingModes',            {'RTW_ROUND_FLOOR'}, ...
        'ImplementationHeaderFile', 'some_hdr.h', ...
        'ImplementationSourceFile', 'some_hdr.c');
    
    %% Create the conceptual representation
    
    arg = getTflArgFromString(hTable, 'y1', 'int16');
    arg.IOType = 'RTW_IO_OUTPUT';
    addConceptualArg(hEntry, arg);
    hEntry.Implementation.setReturn(arg);
    
  6. Создайте представление реализации. Представление реализации описывает сигнатуру функции оптимизации. Чтобы указать, что аргументы реализации имеют тот же порядок и свойства, что и концептуальные аргументы, вызовите функцию getTflArgFromString. Добавление полной записи в таблицу путем вызова функции addEntry.

    function hTable = crl_table_cast_int32_to_int16()
    % Create a code replacement library table 
    
    %% Create a table object
    hTable = RTW.TflTable;
    
    %% Create an entry
    hEntry = RTW.TflCOperationEntry;
    
    %% Create entry parameters
    hEntry.setTflCOperationEntryParameters(...
        'Key',                      'RTW_OP_CAST', ...
        'Priority',                 50, ...
        'ImplementationName',       'my_sat_cast', ...
        'SaturationMode',           'RTW_SATURATE_ON_OVERFLOW', ...
        'RoundingModes',            {'RTW_ROUND_FLOOR'}, ...
        'ImplementationHeaderFile', 'some_hdr.h', ...
        'ImplementationSourceFile', 'some_hdr.c');
    
    %% Create the conceptual and implementation representation
    
    arg = getTflArgFromString(hTable, 'y1', 'int16');
    arg.IOType = 'RTW_IO_OUTPUT';
    addConceptualArg(hEntry, arg);
    hEntry.Implementation.setReturn(arg);
    
    arg = getTflArgFromString(hTable, 'u1', 'int32');
    addConceptualArg(hEntry, arg);
    hEntry.Implementation.addArgument(arg);
    
    
    %% Add the entry to the table
    addEntry(hTable,hEntry);
    
  7. Укажите сведения о построении. В параметрах ввода укажите файлы (заголовок, источник, объект), необходимые генератору кода для замены кода. Для этого примера информация о построении не требуется.

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

    >> hTable = crl_table_cast_int32_to_int16
  9. Зарегистрируйте библиотеку замены кода. Регистрация создает библиотеку замены кода, определяя имя библиотеки, таблицы замены кода и другую информацию. Создайте файл регистрации со следующими спецификациями:

    function rtwTargetInfo(cm)
     
    cm.registerTargetInfo(@loc_register_crl);
    end
     
    function this = loc_register_crl 
     
    this(1) = RTW.TflRegistry; 
    this(1).Name = 'CRL for data type conversions(casts) abd operator code replacement’;
    this(1).TableList = {'crl_table_cast_int32_to_int16.m'}; % table created in this example
    this(1).TargetHWDeviceType = {'*'};
    this(1).Description = 'Example code replacement library';
    
    end
    

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

    >>sl_refresh_customizations

  10. Проверьте библиотеку замены кода. В командной строке MATLAB откройте библиотеку с помощью средства просмотра замены кода и убедитесь, что таблица и запись указаны правильно. Дополнительные сведения см. в разделе Проверка библиотеки замены кода. Настройте модель так, чтобы она использовала библиотеку замены кода, создавала код и проверяла, что замена происходит так, как ожидалось. Если происходит непредвиденное поведение, проверьте попадание и пропустите журналы, чтобы устранить неполадки.

Связанные темы