exponenta event banner

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

На вкладке «Оборудование» приложения 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);

На вкладке Оборудование появится новое устройство.

Укажите аппаратную реализацию, которая сохраняется в сеансах 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 файлы, используйте 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)

См. также

|