На вкладке 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
объект внутренней базе данных.
objectsAdded = target.add(myProc);
На вкладке Hardware вы видите новое устройство.
По умолчанию, когда вы добавляете целевой объект во внутреннюю базу данных, целевые данные доступны только для текущего сеанса работы с 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
файлов, использовать 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)