На вкладке Hardware приложения MATLAB® Coder™ можно задать параметры, которые описывают целевой компьютер и свойства компилятора для программного обеспечения MATLAB, которое позволяет:
Сгенерируйте оптимизированный код для производства или протестируйте оборудование.
Непосредственно протестируйте или разверните сгенерированный код на целевом компьютере.
Вкладка Hardware поддерживает область значений целевого компьютера. Чтобы расширить область значений, укажите новые аппаратные устройства при помощи 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 вы видите новое устройство.
По умолчанию, когда вы добавляете целевой объект функции в память 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
файлы, используйте 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)