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

На вкладке Hardware MATLAB® Coder™ приложении можно задать параметры, которые описывают свойства целевого компьютера и компилятора для программного обеспечения MATLAB, что позволяет вам:

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

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

Вкладка Hardware поддерживает область значений целевых компьютеров. Чтобы расширить область значений, зарегистрируйте новые аппаратные устройства с помощью 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);

На вкладке Hardware вы видите новое устройство.

Задайте аппаратную реализацию, которая сохраняется во время сеансов работы с 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')
The 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 класс.

Для примера, если a 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 файлов, использовать 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)

См. также

|