新しいハードウェア デバイスの登録
[ハードウェア実行] ペインでは、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.Processor
オブジェクトの短い識別子を提供する target.Alias
オブジェクトを作成できます。
target.Processor
オブジェクトを表示します。proccesorObj = target.get('Processor', ... 'Analog Devices-ADSP-CM40x (ARM Cortex-M)');
target.Alias
オブジェクトの作成には関数target.create
を使用します。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