На панели 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
класс.
Для примера, если a 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