注册新硬件设备
在硬件实现窗格中,您可以指定描述 MATLAB® 软件的目标硬件和编译器属性的参数,以便:
在模型仿真期间观测目标硬件。
为生产或测试硬件生成优化的代码。
在目标硬件上直接测试或部署生成的代码。
硬件实现窗格支持多个目标硬件。要扩展所支持的硬件范围,请使用 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);
在硬件实现窗格中,您现在可以将设备供应商和设备类型分别设置为 “MyManufacturer
” 和 “MyProcessor
”。
指定在各 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 工作区中的对象,然后要更新内部数据库中的对象,则可以使用objectsAdded = target.add(myProc, 'UserInstall', true);
target.update
函数。您可以从内部数据库中删除该对象。
要从内部数据库中删除多个持久性对象,请使用target.remove(objectsAdded);
target.clear
函数。
通过修改现有实现来创建硬件实现
如果某个现有硬件实现包含新硬件实现中所需的大部分值,则可以通过创建和修改该现有实现的副本来快速创建新实现。
为新硬件设备创建一个
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);
验证硬件设备数据
要验证目标对象的数据完整性,请使用 target.Object
基类的 IsValid
属性或 validate
方法。
假设有如下示例,您要在其中创建一个 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
或 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