Main Content

新しいハードウェア デバイスの登録

MATLAB® Coder™ アプリの [ハードウェア] タブで、MATLAB ソフトウェアのターゲット ハードウェアとコンパイラ プロパティを記述するパラメーターを指定し、それにより、以下が可能になります。

  • 製品ハードウェアまたはテスト ハードウェア用に最適化されたコードを生成する。

  • 生成されたコードをターゲット ハードウェアで直接テストまたは展開する。

MATLAB コマンド ラインでこのアクションを実行するには、関数 coder.hardware を使用します。

[ハードウェア] タブと関数 coder.hardware はターゲット ハードウェアの範囲をサポートします。範囲を拡大するには、target.Processor クラスと target.LanguageImplementation クラスを使用して新しいハードウェア デバイスを登録します。

新しいデバイスのハードウェア実行の指定

新しいハードウェア デバイスを登録するには、次を行います。

  1. 新しいハードウェア デバイス用の target.Processor オブジェクトを作成します。

    myProc = target.create('Processor', ...
                           'Name', 'MyProcessor', ...
                           'Manufacturer', 'MyManufacturer');

  2. 言語実装の詳細用の target.LanguageImplementation オブジェクトを作成します。

    myLanguageImplementation = target.create('LanguageImplementation', ...
                                             'Name', 'MyProcessorImplementation');
    

  3. 言語実装の詳細を指定します。

    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;

  4. 言語実装をハードウェア デバイスと関連付けます。

    myProc.LanguageImplementations = myLanguageImplementation;
    

  5. target.Processor オブジェクトを内部データベースに追加します。

    objectsAdded = target.add(myProc);

[ハードウェア] タブに、新しいデバイスが表示されます。あるいは、関数 coder.hardware を使用してこのデバイスの coder.Hardware オブジェクトを作成できるようになりました。

MATLAB セッションにわたって持続するハードウェア実装の指定

既定では、内部データベースにターゲット オブジェクトを追加すると、ターゲット データは現在の MATLAB セッションでのみ使用できます。MATLAB セッションにわたるターゲット データの持続を指定できます。

  1. 新しいハードウェア デバイス用の target.Processor オブジェクトを作成します。

    myProc = target.create('Processor', ...
                           'Name', 'MyProcessor', ...
                           'Manufacturer', 'MyManufacturer');
    
    existingImplementation = target.get('LanguageImplementation', ... 
                                        'ARM Compatible-ARM Cortex'); 
    myProc.LanguageImplementations = existingImplementation;

  2. target.Processor オブジェクトを内部データベースに追加し、MATLAB セッションにわたるターゲット データの持続を指定します。

    objectsAdded = target.add(myProc, 'UserInstall', true);
    以降に MATLAB ワークスペースでオブジェクトを変更した場合に内部データベースのオブジェクトを更新するときは、関数 target.update を使用できます。

  3. オブジェクトを内部データベースから削除できます。

    target.remove(objectsAdded);
    複数の永続的なオブジェクトを内部データベースから削除するには、関数 target.clear を使用します。

既存の実行を変更してハードウェア実行を作成

新しいハードウェア実行で必要な値のほとんどが既存のハードウェア実行に含まれている場合は、既存の実行のコピーを作成して変更することで、新しい実行を迅速に作成することができます。

  1. 新しいハードウェア デバイス用の target.Processor オブジェクトを作成します。

    myProc = target.create('Processor', ...
                           'Name', 'MyProcessor', ...
                           'Manufacturer', 'MyManufacturer');

  2. 既存の言語実装をコピーする target.LanguageImplementation オブジェクトを作成します。

    myCopiedImplementation = target.create('LanguageImplementation', ...
                                           'Name', 'MyCopiedImplementation', ...
                                           'Copy', 'Atmel-AVR');
    

  3. 必要な言語実装の詳細を指定します。たとえば、バイト順などです。

    myCopiedImplementation.Endianess = target.Endianess.Big;

  4. 言語実装をハードウェア デバイスと関連付けます。

    myProc.LanguageImplementations = myCopiedImplementation;

  5. target.Processor オブジェクトを内部データベースに追加します。

    objectsAdded = target.add(myProc);

既存の実行を再利用してハードウェア実行を作成

ハードウェア デバイスで既存の実行と同じハードウェア実行が必要な場合、既存の実行を再利用できます。

  1. 新しいハードウェア デバイス用の target.Processor オブジェクトを作成します。

    myProc = target.create('Processor', ...
                           'Name', 'MyProcessor', ...
                           'Manufacturer', 'MyManufacturer');

  2. デバイス ベンダーとタイプについての識別子を使用することで、既存の実行を取得します (たとえば、'ARM Compatible-ARM Cortex')。

    existingImplementation = target.get('LanguageImplementation', ...
                                        'ARM Compatible-ARM Cortex');

  3. 言語実装をハードウェア デバイスと関連付けます。

    myProc.LanguageImplementations = existingImplementation;

  4. 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.exportexportMyProcFunction.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 オブジェクトを作成できます。

  1. target.Processor オブジェクトを取得します。

    proccesorObj = target.get('Processor', ...
                              'Analog Devices-ADSP-CM40x (ARM Cortex-M)');

  2. target.Alias オブジェクトの作成には関数 target.create を使用します。

    aliasProcessorObj = target.create('Alias');

  3. 代替の識別子と元のターゲット オブジェクトの指定には target.Alias オブジェクト プロパティを使用します。

    aliasProcessorObj.Name = 'myShortName';
    aliasProcessorObj.For = proccesorObj;

  4. target.Alias オブジェクトを内部データベースに追加します。

    target.add(aliasProcessorObj);
  5. 元の 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)

参考

|