新しいハードウェア デバイスの登録
MATLAB® Coder™ アプリの [ハードウェア] タブで、MATLAB ソフトウェアのターゲット ハードウェアとコンパイラ プロパティを記述するパラメーターを指定し、それにより、以下が可能になります。
製品ハードウェアまたはテスト ハードウェア用に最適化されたコードを生成する。
生成されたコードをターゲット ハードウェアで直接テストまたは展開する。
MATLAB コマンド ラインでこのアクションを実行するには、関数 coder.hardware
を使用します。
[ハードウェア] タブと関数 coder.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);
target.add summary: Objects added to internal database for current MATLAB session: target.LanguageImplementation "MyProcessorImplementation" target.Processor "MyManufacturer-MyProcessor"
MATLAB® Coder™ を使用している場合: [ハードウェア] タブに、新しいデバイスが表示されます。あるいは、
coder.hardware
関数を使用してこのデバイスのcoder.Hardware
オブジェクトを作成できます。Simulink® Coder™ を使用している場合: [ハードウェア実行] ペインで、[デバイス ベンダー] と [デバイス タイプ] をそれぞれ
MyManufacturer
とMyProcessor
に設定できます。
オブジェクトを内部データベースから削除するには、以下を入力します。
target.remove(objectsAdded)
target.remove summary: Objects removed from internal database: target.LanguageImplementation "MyProcessorImplementation" target.Processor "MyManufacturer-MyProcessor"
MATLAB セッションをまたがって持続するハードウェア実装の指定
既定では、内部データベースにターゲット オブジェクトを追加すると、ターゲット データは現在の MATLAB® セッションでのみ使用できます。次の例では、MATLAB セッションをまたがるターゲット データの持続性を指定する方法を示します。
新しいハードウェア デバイスの target.Processor
オブジェクトを作成し、プロセスの言語実装を ARM Compatible-ARM Cortex
の既存の実装として指定します。
myProc = target.create("Processor",Name="MyProcessor", ... Manufacturer="MyManufacturer"); existingImplementation = target.get("LanguageImplementation", ... "ARM Compatible-ARM Cortex"); myProc.LanguageImplementations = existingImplementation;
作成した target.Processor
オブジェクトを内部データベースに追加し、UserInstall
を true
として指定して、ターゲット データが MATLAB セッションをまたがって持続できるようにします。
objectsAdded = target.add(myProc,UserInstall=true);
target.add summary: Objects added to internal database, which will persist across MATLAB sessions: target.Processor "MyManufacturer-MyProcessor" 1 object not added because they already exist.
その後、MATLAB ワークスペースでオブジェクトを変更した場合に内部データベースのオブジェクトを更新するときは、target.update
関数を使用できます。
オブジェクトを内部データベースから削除するには、以下を入力します。
target.remove(objectsAdded)
target.remove summary: Objects removed from internal database: target.Processor "MyManufacturer-MyProcessor"
複数の永続的なオブジェクトを内部データベースから削除するには、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.add summary: Objects added to internal database for current MATLAB session: target.LanguageImplementation "MyCopiedImplementation" target.Processor "MyManufacturer-MyProcessor"
オブジェクトを内部データベースから削除するには、以下を入力します。
target.remove(objectsAdded)
target.remove summary: Objects removed from internal database: target.LanguageImplementation "MyCopiedImplementation" target.Processor "MyManufacturer-MyProcessor"
既存の実行を再利用してハードウェア実行を作成
ハードウェア デバイスで既存の実行と同じハードウェア実行が必要な場合、既存の実行を再利用できます。
新しいハードウェア デバイス用の target.Processor
オブジェクトを作成します。
myProc = target.create( "Processor",Name="MyProcessor", ... Manufacturer="MyManufacturer");
デバイス ベンダーとタイプについての識別子を使用することで、既存の実行を取得します。
existingImplementation = target.get("LanguageImplementation", ... "ARM Compatible-ARM Cortex");
言語実装をハードウェア デバイスと関連付けます。
myProc.LanguageImplementations = existingImplementation;
target.Processor
オブジェクトを内部データベースに追加します。
objectsAdded = target.add(myProc);
target.add summary: Objects added to internal database for current MATLAB session: target.Processor "MyManufacturer-MyProcessor" 1 object not added because they already exist.
オブジェクトを内部データベースから削除するには、以下を入力します。
target.remove(objectsAdded);
target.remove summary: Objects removed from internal database: target.Processor "MyManufacturer-MyProcessor"
ハードウェア デバイス データの検証
ターゲット オブジェクトのデータの整合性を検証するには、target.Object
基底クラスの IsValid
プロパティまたは validate
メソッドを使用します。
target.Processor
オブジェクトを作成して既存の言語実装をそのオブジェクトに関連付ける例について考えます。
myProcessor = target.create("Processor"); myProcessor.LanguageImplementations = target.get("LanguageImplementation", ... "ARM Compatible-ARM Cortex");
新しく作成されたオブジェクトが無効であることを確認するには、「myProcessor.IsValid
」と入力します。
myProcessor.IsValid
ans = logical
0
メソッド myProcessor.validate()
を使用してオブジェクトを検証しようとすると、エラーが発生します。
myProcessor.validate()
Error using target.internal.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
myProcessor.validate()
メモ: 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.add summary: Objects added to internal database for current MATLAB session: target.Processor "MyManufacturer-MyProcessor" 1 object not added because they already exist.
ハードウェア デバイス データを共有する関数を作成するには、以下を入力します。
target.export(myProc,"FileName", ... "exportMyProcFunction",Overwrite=true)
関数 target.export
は exportMyProcFunction.m
を現在の作業フォルダーに作成します。type
コマンドを使用して機能を確認します。
type("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{:}); end
次に、生成された関数を使用して、データベースのハードウェア デバイス データをコンピューター間およびユーザー間で共有できます。たとえば、別のコンピューターで次のコマンドを入力します。
objectsAdded = exportMyProcFunction;
生成された関数により、target.Processor
オブジェクト MyManufacturer-MyProcessor
が再作成されて内部データベースに追加されます。
オブジェクトを内部データベースから削除するには、以下を入力します。
target.remove(objectsAdded)
target.remove summary: Objects removed from internal database: 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
オブジェクトを内部データベースに追加します。
objectsAdded = target.add(aliasProcessorObj);
target.add summary: Objects added to internal database for current MATLAB session: target.Alias "myShortName" 1 object not added because they already exist.
元の target.Processor
オブジェクトを取得するには、以下を入力します。
target.get("Processor","myShortName");
オブジェクトを内部データベースから削除するには、以下を入力します。
target.remove(objectsAdded)
target.remove summary: Objects removed from internal database: target.Alias "myShortName"
ハードウェア デバイスのデータ定義のアップグレード
rtwTargetInfo.m
ファイルまたは sl_customization.m
ファイル (Simulink® Coder™ および Embedded Coder® にのみ適用) を通じて指定された既存のハードウェア デバイス定義をアップグレードするには、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
ファイル (Simulink Coder および Embedded Coder にのみ適用)
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.add
| coder.hardware
| codebuild
(Embedded Coder) | target.LanguageImplementation
| target.Processor
| target.update
| target.clear
| target.Object