Укажите новые аппаратные устройства

На панели Hardware Implementation можно задать параметры, которые описывают целевой компьютер и свойства компилятора для MATLAB, который позволяет:

  • Наблюдайте целевой компьютер во время симуляций модели.

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

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

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

    target.add(myProc);

На панели Hardware Implementation можно теперь установить Device vendor и Device type к MyManufacturer и MyProcessor соответственно.

Задайте Аппаратную реализацию, которая Сохраняется по сеансам работы с MATLAB

По умолчанию, когда вы добавляете целевой объект функции в память 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 и задайте персистентность целевых данных по сеансам работы с MATLAB.

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

  3. Можно удалить объект из памяти MATLAB.

    processorToRemove = target.get('Processor',...
                                   'MyManufacturer-MyProcessor');
    target.remove(processorToRemove );

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

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

  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 возразите против памяти MATLAB.

    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 возразите против памяти MATLAB.

    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;
Запустите функцию target.export.
target.export(myProc, 'FileName', 'exportMyProcFunction')
Функция создает exportMyProcFunction.m в текущей рабочей папке.
function processor = 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
    target.add(processor, varargin{:});
Используйте сгенерированную функцию, чтобы совместно использовать данные об аппаратном устройстве через компьютеры и пользователей. Когда вы запускаете exportMyProcFunction, это воссоздает myProc возразите и добавляет объект в память MATLAB.

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

Чтобы создать альтернативные идентификаторы для целевых объектов функции, используйте 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 возразите против памяти MATLAB.

    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, запуск:

registerUpgradedTarget('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 = registerTargets(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, запуск:

registerUpgradedTarget('UserInstall', true)

Смотрите также

|

Похожие темы