На вкладке 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)