На панели Hardware Implementation можно задать параметры, которые описывают целевой компьютер и свойства компилятора для MATLAB, который позволяет:
Наблюдайте целевой компьютер во время симуляций модели.
Сгенерируйте оптимизированный код для производства или протестируйте оборудование.
Непосредственно протестируйте или разверните сгенерированный код на целевом компьютере.
Панель Hardware Implementation поддерживает область значений целевого компьютера. Чтобы расширить область значений, укажите новые аппаратные устройства при помощи target.Processor и target.LanguageImplementation классы.
Указывать новое аппаратное устройство:
Создайте target.Processor объект для нового аппаратного устройства.
myProc = target.create('Processor', ... 'Name', 'MyProcessor', ... 'Manufacturer', 'MyManufacturer');
Создайте target.LanguageImplementation объект для деталей реализации языка.
myLanguageImplementation = target.create('LanguageImplementation', ... 'Name', 'MyProcessorImplementation');
Задайте детали реализации языка.
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;
Сопоставьте реализацию языка с аппаратным устройством.
myProc.LanguageImplementations = myLanguageImplementation;
Сохраните target.Processor возразите против памяти MATLAB.
target.add(myProc);
На панели Hardware Implementation можно теперь установить Device vendor и Device type к MyManufacturer и MyProcessor соответственно.
По умолчанию, когда вы добавляете целевой объект функции в память MATLAB, целевые данные доступны только для текущего сеанса работы с MATLAB. Можно задать целевую персистентность данных по сеансам работы с MATLAB.
Создайте target.Processor объект для нового аппаратного устройства.
myProc = target.create('Processor', ... 'Name', 'MyProcessor', ... 'Manufacturer', 'MyManufacturer'); existingImplementation = target.get('LanguageImplementation', ... 'ARM Compatible-ARM Cortex'); myProc.LanguageImplementations = existingImplementation;
Сохраните target.Processor возразите против памяти MATLAB и задайте персистентность целевых данных по сеансам работы с MATLAB.
target.add(myProc, 'UserInstall', true);Можно удалить объект из памяти MATLAB.
processorToRemove = target.get('Processor',... 'MyManufacturer-MyProcessor'); target.remove(processorToRemove );
Если существующая аппаратная реализация содержит большинство значений, вы хотите в новой аппаратной реализации, можно быстро создать новую реализацию путем создания и изменения копии существующей реализации.
Создайте target.Processor объект для нового аппаратного устройства.
myProc = target.create('Processor', ... 'Name', 'MyProcessor', ... 'Manufacturer', 'MyManufacturer');
Создайте target.LanguageImplementation возразите, что копирует существующую реализацию языка.
myCopiedImplementation = target.create('LanguageImplementation', ... 'Name', 'MyCopiedImplementation', ... 'Copy', 'Atmel-AVR');
Задайте необходимые детали реализации языка. Например, порядок байтов.
myCopiedImplementation.Endianess = target.Endianess.Big;
Сопоставьте реализацию языка с аппаратным устройством.
myProc.LanguageImplementations = myCopiedImplementation;
Сохраните target.Processor возразите против памяти MATLAB.
target.add(myProc);
Если ваше аппаратное устройство требует той же аппаратной реализации как существующая реализация, можно снова использовать существующую реализацию.
Создайте target.Processor объект для нового аппаратного устройства.
myProc = target.create('Processor', ... 'Name', 'MyProcessor', ... 'Manufacturer', 'MyManufacturer');
Получите существующую реализацию при помощи идентификатора для поставщика устройства и введите, например, 'ARM Compatible-ARM Cortex'.
existingImplementation = target.get('LanguageImplementation', ... 'ARM Compatible-ARM Cortex');
Сопоставьте реализацию языка с аппаратным устройством.
myProc.LanguageImplementations = existingImplementation;
Сохраните 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(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 объект.
Получите target.Processor объект.
proccesorObj = target.get('Processor', ... 'Analog Devices-ADSP-CM40x (ARM Cortex-M)');
Используйте target.create функция, чтобы создать target.Alias объект.
aliasProcessorObj = target.create('Alias');Используйте target.Alias свойства объектов, чтобы задать альтернативный идентификатор и исходный целевой объект функции.
aliasProcessorObj.Name = 'myShortName';
aliasProcessorObj.For = proccesorObj;Сохраните target.Alias возразите против памяти MATLAB.
target.add(aliasProcessorObj);
Получать исходный 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)target.LanguageImplementation | target.Processor