На панели 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