exponenta event banner

Регистрация новых аппаратных устройств

На панели Hardware Implementation (Аппаратная реализация) можно указать параметры, описывающие свойства целевого оборудования и компилятора для программного обеспечения MATLAB ®, что позволяет:

  • Наблюдение за целевым оборудованием во время моделирования модели.

  • Создание оптимизированного кода для производственного или тестового оборудования.

  • Непосредственно тестируйте или развертывайте сгенерированный код на целевом оборудовании.

Панель «Внедрение аппаратного обеспечения» поддерживает ряд целевых аппаратных средств. Чтобы расширить диапазон, зарегистрируйте новые аппаратные устройства с помощью target.Processor и target.LanguageImplementation классы.

Укажите реализацию оборудования для нового устройства

Чтобы зарегистрировать новое аппаратное устройство:

  1. Создать target.Processor объект для нового аппаратного устройства.

    myProc = target.create('Processor', ...
                           'Name', 'MyProcessor', ...
                           'Manufacturer', 'MyManufacturer');

  2. Создать target.LanguageImplementation для сведений о реализации языка.

    myLanguageImplementation = target.create('LanguageImplementation', ...
                                             'Name', 'MyProcessorImplementation');
    

  3. Укажите сведения о реализации языка.

    myLanguageImplementation.Endianess = target.Endianess.Little;
     
    myLanguageImplementation.AtomicIntegerSize = 64;
    myLanguageImplementation.AtomicFloatSize = 64;
    myLanguageImplementation.WordSize = 64;
     
    myLanguageImplementation.DataTypes.Char.Size = 8;
    myLanguageImplementation.DataTypes.Short.Size = 16;
    myLanguageImplementation.DataTypes.Int.Size = 32;
    myLanguageImplementation.DataTypes.Long.Size = 64;
    myLanguageImplementation.DataTypes.LongLong.IsSupported = true;
    myLanguageImplementation.DataTypes.LongLong.Size = 64;
    myLanguageImplementation.DataTypes.Float.Size = 32;
    myLanguageImplementation.DataTypes.Double.Size = 64;
     
    myLanguageImplementation.DataTypes.Pointer.Size = 32;
      
    myLanguageImplementation.DataTypes.SizeT.Size = 64;
    myLanguageImplementation.DataTypes.PtrDiffT.Size = 64;

  4. Свяжите языковую реализацию с аппаратным устройством.

    myProc.LanguageImplementations = myLanguageImplementation;
    

  5. Добавить target.Processor объект во внутреннюю базу данных.

    objectsAdded = target.add(myProc);

На панели «Реализация оборудования» теперь можно установить для параметра «Поставщик устройства» и «Тип устройства» значение MyManufacturer и MyProcessor соответственно.

Укажите аппаратную реализацию, которая сохраняется в сеансах MATLAB

По умолчанию при добавлении целевого объекта во внутреннюю базу данных целевые данные доступны только для текущего сеанса MATLAB. Можно указать сохранение целевых данных в сеансах MATLAB.

  1. Создать target.Processor объект для нового аппаратного устройства.

    myProc = target.create('Processor', ...
                           'Name', 'MyProcessor', ...
                           'Manufacturer', 'MyManufacturer');
    
    existingImplementation = target.get('LanguageImplementation', ... 
                                        'ARM Compatible-ARM Cortex'); 
    myProc.LanguageImplementations = existingImplementation;

  2. Добавить target.Processor объект для внутренней базы данных и указать сохранение целевых данных в сеансах MATLAB.

    objectsAdded = target.add(myProc, 'UserInstall', true);

  3. Объект можно удалить из внутренней базы данных.

    target.remove(objectsAdded);

Создание аппаратной реализации путем изменения существующей реализации

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

  1. Создать target.Processor объект для нового аппаратного устройства.

    myProc = target.create('Processor', ...
                           'Name', 'MyProcessor', ...
                           'Manufacturer', 'MyManufacturer');

  2. Создать target.LanguageImplementation объект, копирующий существующую реализацию языка.

    myCopiedImplementation = target.create('LanguageImplementation', ...
                                           'Name', 'MyCopiedImplementation', ...
                                           'Copy', 'Atmel-AVR');
    

  3. Укажите требуемые сведения о реализации языка. Например, порядок байтов.

    myCopiedImplementation.Endianess = target.Endianess.Big;

  4. Свяжите языковую реализацию с аппаратным устройством.

    myProc.LanguageImplementations = myCopiedImplementation;

  5. Добавить target.Processor объект во внутреннюю базу данных.

    objectsAdded = target.add(myProc);

Создание аппаратной реализации путем повторного использования существующей реализации

Если аппаратное устройство требует той же аппаратной реализации, что и существующая реализация, можно повторно использовать существующую реализацию.

  1. Создать target.Processor объект для нового аппаратного устройства.

    myProc = target.create('Processor', ...
                           'Name', 'MyProcessor', ...
                           'Manufacturer', 'MyManufacturer');

  2. Извлеките существующую реализацию, используя идентификатор поставщика и типа устройства, например: 'ARM Compatible-ARM Cortex'.

    existingImplementation = target.get('LanguageImplementation', ...
                                        'ARM Compatible-ARM Cortex');

  3. Свяжите языковую реализацию с аппаратным устройством.

    myProc.LanguageImplementations = existingImplementation;

  4. Добавить target.Processor объект во внутреннюю базу данных.

    objectsAdded = target.add(myProc);

Проверка данных аппаратных устройств

Для проверки целостности данных целевых объектов используйте IsValid собственность или validate способ target.Object базовый класс.

Рассмотрим пример создания target.Processor и связать существующую реализацию языка с объектом.

myProcessor = target.create('Processor');
myProcessor.LanguageImplementations = target.get('LanguageImplementation', ...
                                                 'ARM Compatible-ARM Cortex');
Чтобы проверить созданный объект, выполните команду myProcessor.IsValid или myProcessor.validate().
myProcessor.IsValid
ans =
  logical
  0
myProcessor.validate()
Error using target.Processor/validate
Target data validation failed.
* Undefined property "Name" in "Processor" object.
* Undefined identifier in "Processor" object.
Не удалось выполнить проверку, так как target.Processor не указаны свойства:

  • Name - Название процессора

  • Id - Идентификатор объекта

Можно указать имя процессора, которое также указывает идентификатор объекта.

myProcessor.Name = 'MyProcessor';
Проверить действительность myProcessor.
myProcessor.IsValid
ans =
  logical
  1
Устанавливается действительность объекта.

Примечание

При использовании target.add для регистрации целевого объекта программное обеспечение также проверяет действительность объекта.

Экспорт данных аппаратных устройств

Можно совместно использовать ранее созданные данные об аппаратном устройстве на всех компьютерах и пользователях.

В этом примере укажите аппаратное устройство и добавьте его во внутреннюю базу данных.

myProc = target.create('Processor', ...
                    'Name', 'MyProcessor', ...
                    'Manufacturer', 'MyManufacturer');
existingImplementation = target.get('LanguageImplementation', ...
                                 'ARM Compatible-ARM Cortex');
myProc.LanguageImplementations = existingImplementation;

objectsAdded = target.add(myProc);
Чтобы создать функцию для совместного использования данных аппаратных устройств, выполните следующее:
target.export(myProc, 'FileName', 'exportMyProcFunction')
target.export функция создает exportMyProcFunction.m в текущей рабочей папке.
function registeredObjects = exportMyProcFunction(varargin)
% This function was generated using target data export.

    % Create target.Processor "MyManufacturer-MyProcessor"
    processor = target.create("Processor");
    processor.LanguageImplementations(1) = ...
      target.get("LanguageImplementation", "ARM Compatible-ARM Cortex");
    processor.Manufacturer = "MyManufacturer";
    processor.Name = "MyProcessor";

    % Add the target objects to MATLAB memory
    registeredObjects = target.add(processor, varargin{:});
Теперь созданную функцию можно использовать для совместного использования данных аппаратных устройств в базе данных между компьютерами и пользователями. Например, на другом компьютере выполните эту команду.
objectsAdded = exportMyProcFunction;
Созданная функция воссоздает target.Processor объект, MyManufacturer-MyProcessorи добавляет его во внутреннюю базу данных.

Создание альтернативного идентификатора для целевого объекта

Чтобы создать альтернативные идентификаторы для целевых объектов, используйте target.Alias класс.

Например, если target.Processor объект имеет длинный идентификатор класса, можно создать target.Alias объект, который предоставляет короткий идентификатор для target.Processor объект.

  1. Получить target.Processor объект.

    proccesorObj = target.get('Processor', ...
                              'Analog Devices-ADSP-CM40x (ARM Cortex-M)');

  2. Используйте target.create для создания функции target.Alias объект.

    aliasProcessorObj = target.create('Alias');

  3. Использовать target.Alias для указания альтернативного идентификатора и исходного целевого объекта.

    aliasProcessorObj.Name = 'myShortName';
    aliasProcessorObj.For = proccesorObj;

  4. Добавить target.Alias объект во внутреннюю базу данных.

    target.add(aliasProcessorObj);
  5. Извлечение оригинала target.Processor объект, выполнить:

    target.get('Processor', 'myShortName');

Обновление определений данных для аппаратных устройств

Обновление существующих определений устройств, указанных с помощью rtwTargetInfo.m или sl_customization.m файлы, используйте target.upgrade функция.

rtwTargetInfo.m Файл

Предположим, что у вас есть определение аппаратного устройства в rtwTargetInfo.m файл:

function rtwTargetInfo(tr)
  
    % Add registration function handle to the Target Registry
    tr.registerTargetInfo(@loc_register_hardware);
end
  
function hw = loc_register_hardware
    hw = RTW.HWDeviceRegistry;
    hw.Vendor = 'MyManufacturer';
    hw.Type = 'MyDevice';
    hw.Alias = {};
    hw.Platform = {'Prod', 'Target'};
    hw.setWordSizes([8 16 32 64 64 64 64 64 64 64 64]);
    hw.Endianess = 'Little';
    hw.IntDivRoundTo = 'Zero';
    hw.ShiftRightIntArith = true;
    hw.LargestAtomicInteger = 'Long';
    hw.LargestAtomicFloat = 'Double';
end

Для обновления определений данных, содержащихся в файле, выполните следующее:

target.upgrade('rtwTargetInfo', 'myPathTo/rtwTargetInfo.m');
В текущей папке функция создает registerUpgradedTargets.m файл:
function processor = registerUpgradedTargets(varargin)
% This function was generated using target data export.
  
    % Create target.LanguageImplementation 'MyManufacturer-MyDevice'
    languageimplementation = target.create('LanguageImplementation');
    languageimplementation.AtomicFloatSize = 64;
    languageimplementation.AtomicIntegerSize = 64;
    languageimplementation.DataTypes.Char.Size = 8;
    languageimplementation.DataTypes.Double.Size = 64;
    languageimplementation.DataTypes.Float.Size = 64;
    languageimplementation.DataTypes.Half.IsSupported = false;
    languageimplementation.DataTypes.Half.Size = 16;
    languageimplementation.DataTypes.Int.Size = 32;
    languageimplementation.DataTypes.Long.Size = 64;
    languageimplementation.DataTypes.LongLong.IsSupported = false;
    languageimplementation.DataTypes.LongLong.Size = 64;
    languageimplementation.DataTypes.Pointer.Size = 64;
    languageimplementation.DataTypes.PtrDiffT.Size = 64;
    languageimplementation.DataTypes.Short.Size = 16;
    languageimplementation.DataTypes.SizeT.Size = 64;
    languageimplementation.Name = 'MyManufacturer-MyDevice';
    languageimplementation.WordSize = 64;
  
    % Create target.Processor 'MyManufacturer-MyDevice'
    processor = target.create('Processor');
    processor.LanguageImplementations(1) = languageimplementation;
    processor.Manufacturer = 'MyManufacturer';
    processor.Name = 'MyDevice';
  
    % Add the target objects to MATLAB memory
    target.add(processor, varargin{:});
end

Чтобы зарегистрировать аппаратное устройство в MATLAB, запустите:

registerUpgradedTargets()

Если необходимо, чтобы регистрация сохранялась в сеансах MATLAB, выполните следующее:

registerUpgradedTargets('UserInstall', true)

sl_customization.m Файл

Предположим, у вас есть несколько определений аппаратных устройств в sl_customization.m файл:

function sl_customization(cm)
  % sl_customization function to register a device
  % vendor and type with Simulink.
  % Copy or rename this file to sl_customization.m.
  cm.registerTargetInfo(@loc_register_device);
  cm.registerTargetInfo(@loc_register_device2);
  cm.registerTargetInfo(@loc_createConfig);
     
  cm.registerTargetInfo(@locRegisterTfl);
  cm.CodeCoverageTools.add('DummyCoverageToolForTesting',...
                           'HDummyCovTool',...
                           'A Coverage Tool Vendor');
end
 
function thisDev = loc_register_device
  thisDev = RTW.HWDeviceRegistry;
  thisDev.Vendor = 'MyDevVendor';
  thisDev.Type = 'MyDevType';
  thisDev.Alias = {};
  thisDev.Platform = {'Prod', 'Target'};
  thisDev.setWordSizes([8 16 32 32 32]);
  thisDev.LargestAtomicInteger = 'Char';
  thisDev.LargestAtomicFloat = 'None';
  thisDev.Endianess = 'Unspecified';
  thisDev.IntDivRoundTo = 'Undefined';
  thisDev.ShiftRightIntArith = true;
  thisDev.setEnabled({'IntDivRoundTo'});
end
 
function thisDev = loc_register_device2
  thisDev = RTW.HWDeviceRegistry;
  thisDev.Vendor = 'MyDevVendor';
  thisDev.Type = 'MyDevType2';
  thisDev.Alias = {};
  thisDev.Platform = {'Prod', 'Target'};
  thisDev.setWordSizes([8 16 32 32 32]);
  thisDev.LargestAtomicInteger = 'Char';
  thisDev.LargestAtomicFloat = 'None';
  thisDev.Endianess = 'Unspecified';
  thisDev.IntDivRoundTo = 'Undefined';
  thisDev.ShiftRightIntArith = true;
  thisDev.setEnabled({'IntDivRoundTo'});
end
 
% local function
function config = loc_createConfig
  config = rtw.connectivity.ConfigRegistry;
  config.ConfigName = 'Infineon->C16x, XC16x';
  config.ConfigClass = 'pil_slcust.HostDemoConfig1';
  config.SystemTargetFile = {'custom_target.tlc'};
  config.TemplateMakefile = {'custom_target.tmf'};
  config.TargetHWDeviceType = {'Infineon->C16x, XC16x'};
end
 
function thisTfl = locRegisterTfl
  thisTfl(1) = RTW.TflRegistry;
  thisTfl(1).Name = 'myTFL1';
  thisTfl(1).Description = 'Test';
  thisTfl(1).TableList = {'tfl_table_Sum',...
                          'tfl_table_Product',...
                         }; % Sum includes Add and Subtract
  thisTfl(1).BaseTfl = 'ANSI_C';
  thisTfl(1).TargetHWDeviceType = {'*'};
end

Для обновления RTW.HWDeviceRegistry определения данных в файле, выполните:

target.upgrade('sl_customization', 'myPathTo/sl_customization.m')

В текущей папке функция создает registerUpgradedTargets.m файл:

function targetObjects = registerUpgradedTargets(varargin)
% This function was generated using target data export.
 
    % Create target.LanguageImplementation 'MyDevVendor-MyDevType'
    languageimplementation = target.create('LanguageImplementation');
    languageimplementation.AtomicIntegerSize = 8;
    languageimplementation.DataTypes.Char.Size = 8;
    languageimplementation.DataTypes.Double.Size = 64;
    languageimplementation.DataTypes.Float.Size = 32;
    languageimplementation.DataTypes.Half.IsSupported = false;
    languageimplementation.DataTypes.Half.Size = 16;
    languageimplementation.DataTypes.Int.Size = 32;
    languageimplementation.DataTypes.Long.Size = 32;
    languageimplementation.DataTypes.LongLong.IsSupported = false;
    languageimplementation.DataTypes.LongLong.Size = 64;
    languageimplementation.DataTypes.Pointer.Size = 32;
    languageimplementation.DataTypes.PtrDiffT.Size = 32;
    languageimplementation.DataTypes.Short.Size = 16;
    languageimplementation.DataTypes.SizeT.Size = 32;
    languageimplementation.Endianess = target.Endianess.Unspecified;
    languageimplementation.Name = 'MyDevVendor-MyDevType';
    languageimplementation.WordSize = 32;
 
    % Create target.Processor 'MyDevVendor-MyDevType'
    processor = target.create('Processor');
    processor.LanguageImplementations(1) = languageimplementation;
    processor.Manufacturer = 'MyDevVendor';
    processor.Name = 'MyDevType';
 
    % Create target.LanguageImplementation 'MyDevVendor-MyDevType2'
    languageimplementation2 = target.create('LanguageImplementation');
    languageimplementation2.AtomicIntegerSize = 8;
    languageimplementation2.DataTypes.Char.Size = 8;
    languageimplementation2.DataTypes.Double.Size = 64;
    languageimplementation2.DataTypes.Float.Size = 32;
    languageimplementation2.DataTypes.Half.IsSupported = false;
    languageimplementation2.DataTypes.Half.Size = 16;
    languageimplementation2.DataTypes.Int.Size = 32;
    languageimplementation2.DataTypes.Long.Size = 32;
    languageimplementation2.DataTypes.LongLong.IsSupported = false;
    languageimplementation2.DataTypes.LongLong.Size = 64;
    languageimplementation2.DataTypes.Pointer.Size = 32;
    languageimplementation2.DataTypes.PtrDiffT.Size = 32;
    languageimplementation2.DataTypes.Short.Size = 16;
    languageimplementation2.DataTypes.SizeT.Size = 32;
    languageimplementation2.Endianess = target.Endianess.Unspecified;
    languageimplementation2.Name = 'MyDevVendor-MyDevType2';
    languageimplementation2.WordSize = 32;
 
    % Create target.Processor 'MyDevVendor-MyDevType2'
    processor2 = target.create('Processor');
    processor2.LanguageImplementations(1) = languageimplementation2;
    processor2.Manufacturer = 'MyDevVendor';
    processor2.Name = 'MyDevType2';
 
    targetObjects = [processor, processor2];
 
    % Add the target objects to MATLAB memory
    target.add(targetObjects, varargin{:});
end

Чтобы зарегистрировать определения аппаратных устройств в MATLAB, запустите:

registerUpgradedTargets()

Если необходимо, чтобы регистрация сохранялась в сеансах MATLAB, выполните следующее:

registerUpgradedTargets('UserInstall', true)

См. также

|

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