На вкладке «Оборудование» приложения 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);
На вкладке Оборудование появится новое устройство.
По умолчанию при добавлении целевого объекта во внутреннюю базу данных целевые данные доступны только для текущего сеанса 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 файлы, используйте 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)