На панели 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
возразите против внутренней базы данных.
objectsAdded = target.add(myProc);
На панели Hardware Implementation можно теперь установить Device vendor и Device type к MyManufacturer
и MyProcessor
соответственно.
По умолчанию, когда вы добавляете целевой объект во внутреннюю базу данных, целевые данные доступны только для текущего сеанса работы с 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.
objectsAdded = target.add(myProc, 'UserInstall', true);
Можно удалить объект из внутренней базы данных.
target.remove(objectsAdded);
Если существующая аппаратная реализация содержит большинство значений, которые вы хотите в новой аппаратной реализации, можно быстро создать новую реализацию путем создания и изменения копии существующей реализации.
Создайте 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
возразите против внутренней базы данных.
objectsAdded = 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
возразите против внутренней базы данных.
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
объект.
Получите 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
возразите против внутренней базы данных.
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, запуск:
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)
target.LanguageImplementation
| target.Processor