Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

システム ターゲット ファイルのカスタマイズ

ここでは、システム ターゲット ファイルの構造体に関する情報、システム ターゲット ファイルをカスタマイズする場合のガイドライン、骨格となるシステム ターゲット ファイルを作成するために役立つ基本的なチュートリアルについて説明します。

システム ターゲット ファイルを使用したコード生成の制御

システム ターゲット ファイルは、ビルド プロセスのコード生成段階を制御します。また、システム ターゲット ファイルを使用すると、エンド ユーザーへのターゲットの表示方法も制御できます。システム ターゲット ファイルは次のものを提供します。

  • TLC 変数 CodeFormat の値など、ビルド プロセスに不可欠な変数の定義

  • コードを生成する最上位 TLC プログラムへのメイン エントリ ポイント

  • システム ターゲット ファイル ブラウザー内に表示されるターゲット情報

  • ターゲット固有のコード生成オプション (およびビルド プロセスに関連するその他のパラメーター) の定義と、それらのオプションやパラメーターを [コンフィギュレーション パラメーター] ダイアログ ボックスで表示を行うためのメカニズム

  • 他のターゲット (組み込みリアルタイム (ERT) ターゲットなど) からオプションを継承するためのメカニズム

システム ターゲット ファイルは、Target Language Compiler (TLC) ファイルですが、Embedded MATLAB® コードが含まれていることに注意してください。システム ターゲット ファイルの作成または変更を行うには、TLC および MATLAB 言語に関する実用的な知識が必要です。Target Language Compilerおよびスクリプトと関数では、TLC 言語と MATLAB 言語の両方の機能および構文について説明しています。

この節を参照する場合に、コード ジェネレーターに対して用意されているシステム ターゲット ファイルを参照しなければならない場合もあります。これらのファイルは、ほとんどの場合、matlabroot/rtw/c (開く) 内のターゲット固有のフォルダー内に格納されています。追加のシステム ターゲット ファイルは matlabroot/toolbox/rtw/targets (開く) の下に保存されます。

システム ターゲット ファイルの命名および保存場所に関する規則

ターゲットがシステム ターゲット ファイル ブラウザーに表示され、ビルド プロセス内で起動されるには、システム ターゲット ファイルが MATLAB パス上のフォルダーに配置されていなければなりません。フォルダーおよびファイルの命名規則に記載されているシステム ターゲット ファイルおよび関連ターゲット ファイルの保存場所および命名に関する規則に従ってください。

システム ターゲット ファイル構造体

概要

この節では、システム ターゲット ファイルの構造体と内容を説明します。以下のリストに、システム ターゲット ファイルの一般的な構造体を示します。このリストは、システム ターゲット ファイルの完全なコード リストではないことに注意してください。リストは、システム ターゲット ファイルを構成する各部分からの抜粋で構成されています。

%%----------------------------
%% Header Comments Section
%%----------------------------
%% SYSTLC: Example Real-Time Target
%%    TMF: my_target.tmf MAKE: make_rtw
%% Initial comments contain directives for STF Browser.
%% Documentation, date, copyright, and other info may follow.
          ...
%selectfile NULL_FILE
         ...
%%----------------------------
%% TLC Configuration Variables Section
%%----------------------------
%% Assign code format, language, target type.
%%
%assign CodeFormat = "Embedded-C"
%assign TargetType = "RT"
%assign Language   = "C"
%%
%%----------------------------
%% TLC Program Entry Point
%%----------------------------
%% Call entry point function.
%include "codegenentry.tlc"
%%
%%----------------------------
%% (OPTIONAL) Generate Files for Build Process
%%----------------------------
%include "mytarget_genfiles.tlc"
%%----------------------------
%% RTW_OPTIONS Section
%%----------------------------
/%
  BEGIN_RTW_OPTIONS
  %% Define rtwoptions structure array. This array defines target-specific
  %% code generation variables, and controls how they are displayed.
  rtwoptions(1).prompt = 'example code generation options';
        ...
  rtwoptions(6).prompt = 'Show eliminated blocks';
  rtwoptions(6).type = 'Checkbox';
         ...
  %----------------------------------------%
  % Configure RTW code generation settings %
  %----------------------------------------%
         ...
  %%----------------------------
  %% rtwgensettings Structure
  %%----------------------------
  %% Define suffix text for naming build folder here.
  rtwgensettings.BuildDirSuffix = '_mytarget_rtw'
  %% Callback compatibility declaration
  rtwgensettings.Version = '1';

  %% (OPTIONAL) target inheritance declaration
  rtwgensettings.DerivedFrom = 'ert.tlc';
  %% (OPTIONAL) other rtwGenSettings fields...
         ...
  END_RTW_OPTIONS
%/
%%----------------------------
%% targetComponentClass - MATHWORKS INTERNAL USE ONLY
%% REMOVE NEXT SECTION FROM USER_DEFINED CUSTOM TARGETS
%%----------------------------
/%
  BEGIN_CONFIGSET_TARGET_COMPONENT
  targetComponentClass = 'Simulink.ERTTargetCC';
  END_CONFIGSET_TARGET_COMPONENT
%/

既存のシステム ターゲット ファイルに基づいたカスタム ターゲットを作成している場合、targetComponentClass の節 (命令 BEGIN_CONFIGSET_TARGET_COMPONENT および END_CONFIGSET_TARGET_COMPONENT で囲まれている) を削除しなければなりません。このセクションは、MathWorks 社によって開発されるターゲット用に予約済みです。

ヘッダー コメント

ファイルの最初にあるこれらの行は、TLC コメントとして定式化されています。これらの行には、システム ターゲット ファイル ブラウザーとビルド プロセスで必要な情報が格納されています。ブラウザー コメントは、ファイルの最初、つまり、その他のコメントや TLC ステートメントより前に配置しなければならないことに注意してください。

コメントの存在によって、コード ジェネレーターでシステム ターゲット ファイルを検出できるようになります。システム ターゲット ファイル ブラウザーの起動時に、コード ジェネレーターによって MATLAB パスがスキャンされ、形式化されたヘッダー コメントをもつ TLC ファイルが検出されます。コメントには、以下の命令が含まれます。

  • SYSTLC: ブラウザーに表示される記述子。

  • TMF: ビルド プロセス中に使用するテンプレート makefile (TMF) の名前。ターゲットが選択されると、[コンフィギュレーション パラメーター] ダイアログ ボックスの [コード生成] ペインにあるテンプレート makefileフィールドにこのファイル名が表示されます。

  • MAKE: ビルド プロセス中に使用する make コマンド。ターゲットが選択されると、[コンフィギュレーション パラメーター] ダイアログ ボックスの [コード生成] ペインにある [make コマンド] フィールドにこのコマンドが表示されます。

以下のヘッダー コメントは、matlabroot/rtw/c/ert/ert.tlc からのヘッダー コメントです。

%% SYSTLC: Embedded Coder TMF: ert_default_tmf MAKE: make_rtw
%% SYSTLC: Create Visual C/C++ Solution File for Embedded Coder
.
.
.

各コメントの最大行数は 2 行です。

システム ターゲット ファイルで TMF フィールドを指定しない場合でも、ファイルは有効になります。パラメーター [TemplateMakefile] の値を変更するには、rtwgensettings.SelectCallback で指定されるコールバック関数を代わりに使用できます。

rtwgensettings.SelectCallback で指定されるコールバック関数を使用して、エクスターナル モード パラメーター ExtModeExtModeTransportExtModeMexFileExtModeIntrfLevel を変更することもできます。

ヘッダー コメントには、1 つを超える命令のグループを指定できます。これらのグループは、それぞれ異なるターゲット コンフィギュレーションとしてシステム ターゲット ファイル ブラウザーに表示されます。上記の例では、コードの最初の 2 行によって、ERT ターゲットの既定のコンフィギュレーションが指定されます。次の 2 行では、Microsoft® Visual C++® ソリューション (.sln) ファイルを作成およびビルドする構成を指定します。以下の図には、これらのコンフィギュレーションがシステム ターゲット ファイル ブラウザーにどのように表示されるかが示されています。

カスタマイズ済みのヘッダー コメントのサンプルは、カスタム ターゲット コンフィギュレーションの作成を参照してください。

TLC コンフィギュレーション変数

システム ターゲット ファイルのこの節では、全体的なコード生成プロセスに関連するグローバル TLC 変数が割り当てられます。

組み込みターゲットでは、ほとんどの場合、ERT ターゲット (ert.tlc) が使用しているグローバル TLC 変数設定を使用しなければなりません。特に重要なのは、システム ターゲット ファイルが TLC 変数 CodeFormat'Embedded-C' 値を使用して、TLC ファイルの RTW_OPTIONS セクションにある、対応する rtwgensettings.DerivedFrom = 'ert.tlc' を使用することです。以下の変数に値が割り当てられていることを確認します。

  • CodeFormat:TLC 変数 CodeFormat は生成コードの機能を選択します。この変数の 'Embedded-C' 値は ERT ターゲットによって使用されます。ERT ベースのターゲットは、CodeFormat の値として 'Embedded-C' を指定しなければなりません。この選択は、量産コード、最小のメモリ使用量、静的メモリ割り当ておよび生成されたコードへの簡素化されたインターフェイスを実現するために設計されています。

    TLC 変数 CodeFormat のその他の値の詳細については、製品間でのシステム ターゲット ファイルのサポートの比較を参照してください。

  • Language:有効な値は C のみです。この値は、コンフィギュレーション パラメーター TargetLang による指定に従って C または C++ コード生成をサポートします。

  • TargetType:コード ジェネレーターでは、プリプロセッサ記号 RTNRT を定義して、シミュレーション コードをリアルタイム コードから区別します。これらの記号は、条件付きコンパイルで使用されます。TargetType 変数は、RT または NRT が定義済みであるかどうかを決定します。

    ほとんどのターゲットは、リアルタイム コードを作成するように設計されています。これらのターゲットは、以下のように TargetType を割り当てます。

    %assign TargetType = "RT"

    モデル参照シミュレーション ターゲット、高速化されたシミュレーション ターゲット、RSim ターゲット、S-Function ターゲットなど、ターゲットの中には、リアルタイムでは使用しないコードを生成するターゲットもあります。このようなターゲットは、以下のように TargetType を割り当てます。

    %assign TargetType = "NRT"

TLC プログラムのエントリ ポイントおよび関連する %include

コード生成プロセスは通常 codegenentry.tlc から始まります。システム ターゲット ファイルは次のように codegenentry.tlc を呼び出します。

%include "codegenentry.tlc"

メモ

codegenentry.tlc および下位レベル TLC ファイルは、CodeFormatTargetType および Language が割り当てられていることを前提にしています。codegenentry.tlc を含める前にこれらの変数を設定してください。

ターゲット固有のコード生成機能を実装しなければならない場合、TLC ファイル mytarget_genfiles.tlc をシステム ターゲット ファイルに含めなければなりません。このファイルには、codegenentry.tlc を呼び出す前後にカスタム TLC コードを実行するためのメカニズムが用意されています。このメカニズムの詳細は、以下を参照してください。

  • メインのコード生成エントリ ポイント後の実行のためのカスタム TLC コードのサンプルは、mytarget_genfiles.tlc の使用を参照してください。

  • ビルド プロセスに関する一般的な情報およびその他のビルド プロセス カスタマイズ化フックに関する情報は、ターゲットの開発とビルド プロセスを参照してください。

コード生成プロセスをカスタマイズするもう 1 つの方法として、低水準関数 (通常 codegenentry.tlc で起動される) を直接呼び出し、プロセスの各ステージに独自の TLC 関数を含める方法が挙げられます。この手法は、注意して使用しなければなりません。詳細については、TLC ファイルを参照してください。

codegenentry.tlc によって呼び出される低水準関数は以下のとおりです。

  • genmap.tlc: ブロック名を対応する言語固有のブロック ターゲット ファイルにマップします。

  • commonsetup.tlc: グローバル変数を設定します。

  • commonentry.tlc: コードの生成プロセスを開始します。

RTW_OPTIONS 節

RTW_OPTIONS 節は、以下の命令で囲まれています。

/%
  BEGIN_RTW_OPTIONS
.
.
.
  END_RTW_OPTIONS
%/

RTW_OPTIONS 節の最初の部分は、rtwoptions 構造体の配列を定義します。この構造体は、rtwoptions を使用したカスタム ターゲット オプションの表示で説明されています。

RTW_OPTIONS 節の 2 番目の部分は、コード生成プロセスのビルド フォルダー名およびその他の設定を定義する rtwgensettings を定義します。rtwgensettings の詳細については、rtwgensettings 構造体を参照してください。

rtwgensettings 構造体

システム ターゲット ファイルの最後の部分は rtwgensettings 構造体を定義します。この構造体には、model.rtw ファイルに書き込まれ、ビルド プロセスによって使用される情報が格納されています。ターゲット開発者の最大の関心の rtwgensettings フィールドは、以下のとおりです。

  • rtwgensettings.Version:このプロパティを使用すると、rtwoptions コールバックが有効になり、rtwgensettings.SelectCallback でコールバック API が使用できるようになります。

    メモ

    コールバックを使用するには、rtwgensettings.Version を空ではない値に設定 "しなければなりません"。次に例を示します。

    rtwgensettings.Version = '1';
    

    上記のステートメントをシステム ターゲット ファイルの Configure RTW code generation settings セクションに追加します。

  • rtwgensettings.DerivedFrom:この構造体フィールドは、オプションの継承先のシステム ターゲット ファイルを定義します。ターゲット オプションの継承を参照してください。

  • rtwgensettings.SelectCallback:この構造体フィールドは、関数 SelectCallback を指定します。rtwgensettings.Version を空ではない値に設定しないとコールバックは無視されます。SelectCallback は、ターゲットの個別のオプションではなく、ターゲット自体に関連付けられています。[システム ターゲット ファイル] コンフィギュレーション パラメーターを設定してターゲットを選択すると、関数 SelectCallback がトリガーされます。

    関数 SelectCallback は、コンフィギュレーション パラメーターの設定 (または無効化) に役立ちます。

    以下のコードを実行すると関数 SelectCallback がインストールされます。

    rtwgensettings.SelectCallback = 'my_select_callback_handler(hDlg,hSrc)';

    関数 SelectCallback への引数 (hDlg, hSrc) は、コールバック API 関数によって使用されるプライベート データのハンドルです。

    メモ

    開発したカスタム ターゲットにモデル参照との互換性をもたせる場合は、関数 SelectCallback を実装し、モデル参照の互換性を宣言しなければなりません。モデル参照のサポートを参照してください。

  • rtwgensettings.ActivateCallback: このプロパティは、関数 ActivateCallback を指定します。関数 ActivateCallback は、モデルのアクティブなコンフィギュレーション セットが変更された場合にトリガーされます。このトリガーは、モデルの読み込み中に発生する場合、また、ユーザーがアクティブなコンフィギュレーション セットを変更した時に発生する場合があります。

    以下のコードを実行すると関数 ActivateCallback がインストールされます。

    rtwgensettings.ActivateCallback = 'my_activate_callback_handler(hDlg,hSrc)';

    関数 ActivateCallback への引数 (hDlg, hSrc) は、コールバック API 関数によって使用されるプライベート データのハンドルです。

  • rtwgensettings.PostApplyCallback: このプロパティは、関数 PostApplyCallback を指定します。関数 PostApplyCallback は、[コンフィギュレーション パラメーター] ダイアログ ボックスでオプションを編集後に [適用] ボタンまたは [OK] ボタンをクリックするとトリガーされます。関数 PostApplyCallback は、コンフィギュレーション セットへの変更の適用後に呼び出されます。

    以下のコードを実行すると関数 PostApplyCallback がインストールされます。

    rtwgensettings.PostApplyCallback = 'my_postapply_callback_handler(hDlg,hSrc)';

    関数 PostApplyCallback への引数 (hDlg, hSrc) は、コールバック API 関数によって使用されるプライベート データのハンドルです。

  • rtwgensettings.BuildDirSuffix:ビルド プロセスによって作成されたビルド フォルダーを識別するために、ほとんどのシステム ターゲット ファイルではフォルダー名の接尾辞が定義されます。ビルド フォルダーの名前を形成するために、ビルド プロセスでは、rtwgensettings.BuildDirSuffix フィールド内で定義された接尾辞がモデル名に追加されます。rtwgensettings.BuildDirSuffix の新しい string 値を指定して、接尾辞を変更できます。以下に例を示します。

    rtwgensettings.BuildDirSuffix = '_mytarget_rtw'

    ビルド プロセスでは、model_mytarget_rtw という名前のビルド フォルダーが作成されます。詳細については、ビルド プロセスのフォルダーを参照してください。

    新しい string 値を指定するために関数は "使用しない"でください。以下に例を示します。

    rtwgensettings.BuildDirSuffix = my_get_build_suffix(bdroot);

追加のコード生成オプション

TLC による生成コードの構成には、追加の TLC コード生成変数についての説明が記載されています。ターゲットのエンド ユーザーは、次の形式の MATLAB コマンドを入力することによって、これらの変数を割り当てることができます。

set_param(modelName,'TLCOptions','-aVariable=val');

詳細については、コード生成の TLC の指定を参照してください。

ただし、システム ターゲット ファイル内でこれらの変数を割り当てるための推奨される手法は、以下の形式のステートメントを使用する手法です。

%assign Variable = val

これらの割り当ては、システム ターゲット ファイルでコメント [Configure RTW code generation settings] を入力した後の節に追加して、読みやすくすることをお勧めします。

モデル参照の注意事項

コード ジェネレーターのモデル参照機能をサポートするために行う必要のあるシステム ターゲット ファイルおよびその他の変更に関する重要な情報については、モデル参照のサポートを参照してください。

カスタム ターゲット オプションの定義と表示

rtwoptions を使用したカスタム ターゲット オプションの表示

システム ターゲット ファイル内で rtwoptions 構造体をカスタマイズすると、[コンフィギュレーション パラメーター] ダイアログ ボックスの [コード生成] ペインでのオプションの表示を制御できます。

rtwoptions 構造体のフィールドは、変数や関連するユーザー インターフェイスの要素を [コンフィギュレーション パラメーター] ダイアログ ボックス内に表示されるように定義します。rtwoptions 構造体配列を使用すると、ダイアログ ボックス内に表示されるターゲット固有のオプションを定義し、オプションをカテゴリ別に整理します。これらのオプションの処理方法の指定には、コールバック関数を記述する方法もあります。

[コード生成] ペインが表示されると、rtwoptions 構造体配列がスキャンされ、オプションのリストが表示されます。割り当てられているユーザー インターフェイス要素 (チェック ボックス、エディット フィールド、メニュー、プッシュ ボタンなど) によって表現される各オプションには、現在のオプション値が表示されます。

ユーザー インターフェイス要素は、有効または無効 (グレー表示) の状態のいずれかの状態を取れます。オプションが有効になっている場合、オプションの値を変更できます。あるオプションが無効になっている場合、そのオプションでは既定値が使用され、オプションの値を変更することはできません。

rtwoptions 構造体配列を使用して、特別な非 UI 要素を定義することもできます。この要素は、コールバック関数の実行をトリガーしますが、[コード生成] ペインには表示されません。非 UI 要素を参照してください。

rtwoptions 構造体配列の要素は、グループにまとめられています。アイテムのグループは、それぞれ Category タイプのヘッダー要素で始まります。Category ヘッダーの既定のフィールドには、そのカテゴリ内に残る要素数が含まれていなければなりません。

Category ヘッダーの後には、[コード生成] ペインに表示されるオプションが続きます。各カテゴリのヘッダーの後には、1 つ以上の定義要素が続きます。

ターゲット オプションの各カテゴリは、[コンフィギュレーション パラメーター] ダイアログ ボックスの [コード生成] にリストされているオプションに該当します。

rtwoptions 構造体フィールドのまとめには、rtwoptions 構造体のフィールドが要約されています。

サンプル rtwoptions 構造体.  次のコードは、構造体配列 rtwoptions を定義しています。最初の (ヘッダー) 要素の既定のフィールドは、4 に設定されています。これは、ヘッダーに続く要素の数を示しています。

  rtwoptions(1).prompt        = 'userPreferred target options (I)';
  rtwoptions(1).type          = 'Category';
  rtwoptions(1).enable        = 'on';
  rtwoptions(1).default       = 4;   % number of items under this category
                                     % excluding this one.
  rtwoptions(1).popupstrings  = '';  % At the first item, user has to 
  rtwoptions(1).tlcvariable   = '';  % initialize all supported fields
  rtwoptions(1).tooltip       = '';
  rtwoptions(1).callback      = '';
  rtwoptions(1).makevariable  = '';

  rtwoptions(2).prompt        = 'Execution Mode';
  rtwoptions(2).type          = 'Popup';
  rtwoptions(2).default       = 'Real-Time';
  rtwoptions(2).popupstrings  = 'Real-Time|UserDefined';
  rtwoptions(2).tlcvariable   = 'tlcvariable1';
  rtwoptions(2).tooltip       = ['See this text as tooltip'];

  rtwoptions(3).prompt        = 'Log Execution Time';
  rtwoptions(3).type          = 'Checkbox';
  rtwoptions(3).default       = 'on';
  rtwoptions(3).tlcvariable   = 'RL32LogTETModifier';
  rtwoptions(3).tooltip       = ['']; % no tooltip

  rtwoptions(4).prompt        = 'Real-Time Interrupt Source';
  rtwoptions(4).type          = 'Popup';
  rtwoptions(4).default       = 'Timer';
  rtwoptions(4).popupstrings  = 'Timer|5|6|7|8|9|10|11|12|13|14|15';
  rtwoptions(4).tlcvariable   = 'tlcvariable3';
  rtwoptions(4).callback      = 'usertargetcallback(hDlg, hSrc, ''tlcvariable3'')';
  rtwoptions(4).tooltip       = [''];
  rtwoptions(4).tooltip       = ['See TLC file for how to use reserved '...
    ' keyword ''hDlg'', and ''hSrc''.'];
...
  rtwoptions(5).prompt        = 'Signal Logging Buffer Size in Doubles';
  rtwoptions(5).type          = 'Edit';
  rtwoptions(5).default       = '100000';
  rtwoptions(5).tlcvariable   = 'tlcvariable2';
  rtwoptions(5).tooltip       = [''];

最初の要素は、[userPreferred target options (I)] ペインを [コンフィギュレーション パラメーター] ダイアログ ボックスの [コード生成] に追加します。ペインには、rtwoptions(2)rtwoptions(3)rtwoptions(4) および rtwoptions(5) で定義されたオプションが表示されます。

多数のオプションを定義する場合、1 つのシステム ターゲット ファイル内で複数の Category グループを定義できます。

rtwoptions 構造体とコールバックは、TLC ファイルへの組み込みですが、MATLAB コードで記述されていることに注意してください。rtwoptions 構造体の定義とコードの構文を検証するには、コマンドをコピーして MATLAB コマンド ウィンドウに貼り付けて MATLAB プロンプトで実行します。

usertarget.tlc およびそれに用意されているサンプル callback ファイルの詳細については、カスタマイズ済み rtwoptions を使用するサンプル システム ターゲット ファイルを参照してください。ターゲット固有の rtwoptions 定義の他の例は、matlabroot/rtw/ctarget.tlc ファイルを参照してください。

rtwoptions 構造体フィールドのまとめには、rtwoptions 構造体のフィールドがリストされています。

rtwoptions 構造体フィールドのまとめ

フィールド名説明

callback

コールバック使用のサンプルは、カスタマイズ済み rtwoptions を使用するサンプル システム ターゲット ファイルを参照してください。

closecallback
(obsolete)

closecallback は使用しないでください。
代わりに rtwgensettings.PostApplyCallback を使用してください (rtwgensettings 構造体を参照)。

closecallback は無視されます。

コールバック使用のサンプルは、カスタマイズ済み rtwoptions を使用するサンプル システム ターゲット ファイルを参照してください。

default

オプションの既定値 (typePushbutton の場合は空)。

enable

'on' または 'off' でなければなりません。'on' の場合、オプションは有効なアイテムとして表示されます。それ以外の場合は、無効なアイテムとして表示されます。

makevariable

オプションに関連付けられているテンプレート makefile トークン (存在する場合)。makevariable は、テンプレート makefile の処理中に展開されます。テンプレート makefile トークンを参照してください。

modelReferenceParameterCheck参照されているモデルおよびその親モデル内でオプションが同じ値を取らなければならないかどうかを指定します。このフィールドに値 'on' が指定されている場合、または何も指定されていない場合、オプションの値は同じでなければなりません。このフィールドが 'off' に指定されている場合、これらのオプション値は異なる値を取ることができます。コンフィギュレーション オプションの値一致の制御を参照してください。

NonUI

要素は表示されませんが、クローズまたはオープン コールバックを起動するために使用されます。非 UI 要素を参照してください。

opencallback
(obsolete)

opencallback は使用しないでください。
代わりに rtwgensettings.SelectCallback を使用してください (rtwgensettings 構造体を参照)。

コールバック使用のサンプルは、カスタマイズ済み rtwoptions を使用するサンプル システム ターゲット ファイルを参照してください。

popupstrings

typePopup の場合、popupstrings によってメニュー内のアイテムが定義されます。アイテムは、"|" (縦棒) 文字によって区切られます。以下の例では、GRT ターゲットによって使用される [MAT ファイル変数名の修飾子] メニューが定義されます。

'rt_|_rt|none'

prompt

オプション用のラベル。

tlcvariable

オプションに関連付けられている TLC 変数の名前。

tooltip

マウスがアイテム上に置かれたときに表示されるヘルプ テキスト。

type

要素のタイプ:CheckboxEditNonUIPopupPushbutton、または Category

非 UI 要素.  タイプが NonUI である配列 rtwoptions の要素は、コールバックの起動のみを目的としています。NonUI 要素は、[コンフィギュレーション パラメーター] ダイアログ ボックスには表示されません。NonUI 要素を使用すると、ダイアログ ボックスの開閉時に、ユーザー インターフェイスの要素に関連しないコールバックを実行できます。例については、次の節カスタマイズ済み rtwoptions を使用するサンプル システム ターゲット ファイルを参照してください。

メモ

タイプ NonUI または Edit 要素の既定値によって、その要素で許容される値のセットが決まります。

  • 既定値が '0' または '1' である場合は次のとおりです。

    • タイプ NonUI の場合、要素はブール値を格納する。

    • タイプ Edit の場合、要素は int32 型の値を格納する。

  • 既定値に '0' または '1' 以外の整数が含まれる場合、要素は int32 型の値を格納します。

  • 既定値に整数が含まれない場合、要素は文字ベクトルとして評価されます。

カスタマイズ済み rtwoptions を使用するサンプル システム ターゲット ファイル

[コード生成] ペインでカスタム オプションを表示および処理するための rtwoptions 構造体の使用方法のサンプルとして、MATLAB® ファイル コールバック関数を使用した実際のシステム ターゲット ファイルが用意されています。このサンプルは、コールバック API と互換性があります。

このサンプル ターゲット ファイルには、以下が含まれています。

  • usertarget.tlc:サンプル システム ターゲット ファイル。このファイルでは、カスタム メニュー、チェック ボックスおよびエディット フィールドを定義する方法を説明します。ファイルでは、コールバックの使用についても説明します。

  • usertargetcallback.m:メニューによって起動される MATLAB® ファイル コールバック。

この節を学習する場合は、サンプル ファイルを参照してください。サンプル システム ターゲット ファイル usertarget.tlc には、以下のカスタム ターゲット オプションを表示するための rtwoptions の使用方法が説明されています。

  • [Execution Mode] メニュー。

  • [Log Execution Time] チェック ボックス。

  • [リアルタイム割り込みソース] メニュー。このメニューは、外部ファイル usertargetcallback.m で定義されているコールバックを実行します。このメニューに関連付けられている TLC 変数は、コールバックに渡され、メニューの現在の値を表示します。

  • [Signal Logging Buffer Size in Doubles] エディット フィールド。

[コンフィギュレーション パラメーター] ダイアログ ボックスにあるサンプル ターゲット オプションを操作しながら、サンプル コードを学習してください。サンプル ターゲット ファイルを使用するには、以下の手順を行います。

  1. 使用するモデルを開きます。

  2. [コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[コード生成] ペインを選択します。

  3. [参照] をクリックします。システム ターゲット ファイル ブラウザーが開きます。usertarget.tlc を選択します。[OK] をクリックします。

  4. [コード生成] ペインにサブタブ [userPreferred target options (I)] が表示されたことを確認します。

  5. このカテゴリのオプションを操作し、[コンフィギュレーション パラメーター] ダイアログ ボックスを開閉する際に、MATLAB コマンド ウィンドウに表示されるメッセージを確認してください。これらのメッセージは、システム ターゲット ファイル内のコードまたはシステム ターゲット ファイルから起動されたコールバックから出力されます。

ターゲット オプションの継承

ert.tlc には、Embedded Coder® コード生成オプションの基本的なセットがあります。作成中のターゲットが ert.tlc ベースの場合は、システム ターゲット ファイルは、通常、ERT 内で定義されるオプションを継承しなければなりません。

rtwgensettings 構造体内の rtwgensettings.DerivedFrom フィールドを使用して、オプションの継承先のシステム ターゲット ファイルを定義します。このメカニズムを使用するために、カスタム ターゲットを以下の手順で変換しなければなりません。

次の例のように rtwgensettings.DerivedFrom フィールドの値を設定します。

rtwgensettings.DerivedFrom = 'stf.tlc';

上記の stf には、継承するオプションを含むシステム ターゲット ファイルの名前が入ります。以下に例を示します。

rtwgensettings.DerivedFrom = 'ert.tlc';

[コンフィギュレーション パラメーター] ダイアログ ボックスによってコードのこの行が実行されると、stf.tlc からのオプションが自動的に含まれます。stf.tlc が、新しいレイアウトに変換された MathWorks の内部システム ターゲット ファイルである場合、ダイアログ ボックスには、その新しいレイアウトを使用して継承されたオプションが表示されます。

サポートされていないオプションの処理.  作成中のターゲットが、ert.tlc から継承されたすべてのオプションをサポートしていない場合、サポートされていないオプション設定を検出し、警告またはエラー メッセージが表示されるようにしなければなりません。場合によっては、ターゲットがサポートしていないオプションをユーザーが選択した場合に、ビルド プロセスを中止しなければならないことがあります。たとえば、ターゲットが [メイン プログラム例の生成] オプションをサポートしていない場合にこのオプションが選択された場合、ビルド プロセスが先に進まないようにしなければなりません。

作成中のターゲットですべての継承された ERT オプションがサポートされていない場合でも、それらの ERT オプションは、[コンフィギュレーション パラメーター] ダイアログ ボックスの [コード生成] ペイン内に保持されていなければなりません。システム ターゲット ファイルの rtwoptions 構造体からのサポートされていないオプションの単純な削除は行わないでください。コード ジェネレーターが最適化を実行するときにこのコード ジェネレーターにスキャンされるように、オプションはダイアログ ボックスに存在しなければなりません。

たとえば、ユーザーが [1 つの出力/更新関数] オプションをオフにしないようにするには、このオプションをダイアログ ボックスから削除し、単純に TLC 変数 CombineOutputUpdateFcnson に割り当てる方法が合理的に見えるかもしれません。しかし、オプションがダイアログ ボックスに含まれていない場合、コード ジェネレーターは出力関数と更新関数は "組み合わせられるべきではない" と判断します。この結果として、効率の悪いコードが生成されることになります。

システム ターゲット ファイルをカスタマイズするためのヒントと手法

はじめに

この節では、以下の内容を含む、システム ターゲット ファイルをカスタマイズするための手法が説明されています。

  • システム ターゲット ファイルからカスタム TLC コードを起動する方法

  • 複数の開発環境をサポートする方法

  • システム ターゲット ファイルを更新する際の考慮事項

必須 %include および推奨される %include

ターゲット固有のコード生成機能を実装しなければならない場合、TLC ファイル mytarget_genfiles.tlc をシステム ターゲット ファイルに含めることをお勧めします。

必要となる TLC 環境のシステム ターゲット ファイルによるセットアップが完了したら、codegenentry.tlc を含めて、標準のコード生成プロセスが起動するようにしなければなりません。

mytarget_genfiles.tlc では、メイン コード生成のエントリ ポイントの後にカスタム TLC コードを実行するメカニズムが使用できます。mytarget_genfiles.tlc の使用を参照してください。

mytarget_genfiles.tlc の使用.  mytarget_genfiles.tlc (オプション) は、ターゲット ビルド プロセスの一部として追加ファイルを生成するターゲット固有 TLC ファイルを起動するセントラル ファイルとして使用できます。たとえば、ターゲットによって、開発環境用のサブ makefile またはプロジェクト ファイルが作成されたり、自動ダウンロードを行うためにデバッガー用のコマンド スクリプトが作成されたりする場合があります。

その後、ビルド プロセスは、これらの生成済みのファイルを make プロセスから直接起動するか、実行可能ファイルが作成されてから起動できます。これは、STF_make_rtw_hook ファイルによるビルド プロセスのカスタマイズで説明されている STF_make_rtw_hook.m のメカニズムを使用して行われます。

次の TLC コードは、サンプルの mytarget_genfiles.tlc ファイルを示しています。

%selectfile NULL_FILE

%assign ModelName = CompiledModel.Name

%% Create Debugger script
%assign model_script_file = "%<ModelName>.cfg"
%assign script_file = "debugger_script_template.tlc"

%if RTWVerbose
   %selectfile STDOUT
   ### Creating %<model_script_file>
   %selectfile NULL_FILE
%endif

%include "%<script_file>"
%openfile bld_file = "%<model_script_file>"
%<CreateDebuggerScript()>
%closefile bld_file

ターゲット オプション値に対するエイリアスを処理する

この節では、ターゲット デバイス タイプ (ProdHWDeviceType) およびコード置換ライブラリ (CodeReplacementLibrary) 用のユーザー指定値のテスト時に、エイリアス値またはレガシ値を検出および解決するために使用できるユーティリティ関数について説明します。

RTW.isHWDeviceTypeEq.  2 つのターゲット デバイス タイプ値が同じハードウェア デバイスを表しているかどうかをテストするために、以下の関数を実行します。

result = RTW.isHWDeviceTypeEq(type1,type2)

上記で、type1 および type2 は、ターゲット デバイス タイプ値またはエイリアスを含む文字ベクトルを示します。

関数 RTW.isHWDeviceTypeEq は、type1type2 が同じハードウェア デバイスを表す文字ベクトルである場合、true を返します。たとえば、次の呼び出しは true を返します。

RTW.isHWDeviceTypeEq('Specified','Generic->Custom')

ターゲット デバイス タイプ オプション ProdHWDeviceType の説明については、[ハードウェア実行] ペインのパラメーターデバイス ベンダーおよびデバイス タイプに関するコマンド ライン情報を参照してください。

RTW.resolveHWDeviceType.  値がエイリアス値またはレガシ値である可能性がある場合にハードウェア デバイスのデバイス タイプ値を返すには、以下の関数を起動します。

result = RTW.resolveHWDeviceType(type)

上記で、type は、ターゲット デバイス タイプ値またはエイリアスを含む文字ベクトルです。

関数 RTW.resolveHWDeviceType は、デバイスのデバイス タイプ値を返します。たとえば、以下の呼び出しは、いずれも 'Generic->Custom' を返します。

RTW.resolveHWDeviceType('Specified')
RTW.resolveHWDeviceType('Generic->Custom')

ターゲット デバイス タイプ オプション ProdHWDeviceType の説明については、[ハードウェア実行] ペインのパラメーターデバイス ベンダーおよびデバイス タイプに関するコマンド ライン情報を参照してください。

RTW.isTflEq.  2 つのコード置換ライブラリ (CRL) 名が同じ CRL を表しているかどうかをテストするために、以下の関数を呼び出します。

result = RTW.isTflEq(name1,name2)

上記で、name1 および name2 は、CRL 値またはエイリアスを含む文字ベクトルを示します。

関数 RTW.isTflEq は、name1name2 が同じコード置換ライブラリを表す文字ベクトルである場合、true を返します。たとえば、次の呼び出しは true を返します。

RTW.isTflEq('GNU','GNU C99 extensions')

CodeReplacementLibrary のパラメーターについては、コード置換ライブラリを参照してください。

RTW.resolveTflName.  値がエイリアス値またはレガシ値である可能性がある場合にコード置換ライブラリの CRL 値を返すには、以下の関数を起動します。

result = RTW.resolveTflName(name)

上記で、name は、CRL 値またはエイリアスを含む文字ベクトルです。

関数 RTW.resolveTflName は、参照されるコード置換ライブラリの値を返します。たとえば、以下の呼び出しは、いずれも 'GNU C99 extensions' を返します。

RTW.resolveTflName('GNU')
RTW.resolveTflName('GNU C99 extensions')

CodeReplacementLibrary のパラメーターについては、コード置換ライブラリを参照してください。

複数の開発環境のサポート

ターゲットによっては、複数の開発環境をサポート (2 つ以上のクロスコンパイラを使用している場合など) または複数のモードでのコード生成をサポート (バイナリ実行可能ファイルとコンパイラ用のプロジェクト ファイルを生成する場合など) しなければならない場合があります。

この要件に対する 1 つの方法は、複数のシステム ターゲット ファイルを実装することです。各システム ターゲット ファイルが開発環境用のテンプレート makefile を呼び出します。この方法では、2 つの異なるターゲットが得られます。

カスタム システム ターゲット ファイルの更新

カスタムシステム ターゲット ファイルを更新すると、更新されたシステム ターゲット ファイルを使用する、読み込むモデルのオプション値に影響を与えることがあります。あるオプションを無効にすると、更新されたシステム ターゲット ファイルはそのオプションの既定値を使用します。モデルでそのオプションについて値が異なっていると、更新されたシステム ターゲット ファイルを使用してモデルを読み込むときに、モデルからの値は破棄され、システム ターゲット ファイルは代わりに既定値を使用します。

カスタム ターゲット コンフィギュレーションの作成

はじめに

このチュートリアルでは、ERT ベースのターゲット my_ert_target を作成するプロセスを順を追って説明します。この演習では、カスタム ターゲットの作成時に通常行う以下のようないくつかのタスクについて説明します。

  • ターゲット フォルダーの設定と MATLAB パスの変更。

  • カスタム ターゲットのシステム ターゲット ファイル ブラウザーへの表示、ERT オプションの継承、ターゲット固有のオプションの表示、および既定のホスト ベース コンパイラを使用したコードの生成が行われるように標準のシステム ターゲット ファイルおよび TMF に変更を加える。

  • インライン S-Function のある簡単なモデルを使用してカスタム ターゲットでビルド プロセスをテストする。

この演習では、実行可能な骨格となる ERT ベース ターゲットを実装します。このターゲットは、カスタムの組み込みターゲットの完全な実装の開始点として役立ちます。

my_ert_target の概要

以下の節では、骨格となるターゲット my_ert_target を作成します。ターゲットは、ERT ターゲットの標準オプションを継承およびサポートし、[コンフィギュレーション パラメーター] ダイアログ ボックスで追加のターゲット固有のオプションを表示します (my_ert_target のターゲット固有のオプションを参照)。

my_ert_target のターゲット固有のオプション

my_ert_target は、ツールチェーンベースのビルドをサポートし、ホスト システム上で実行するコードおよび実行可能ファイルを生成します。Microsoft Windows® プラットフォームでは、my_ert_targetlcc コンパイラを使用します。これはコード ジェネレーターに同梱されています。

Microsoft Windows プラットフォームにサポート対象のコンパイラがインストールされていない場合、ソフトウェアは C コードのコンパイルに lcc を使用します。

メモ

lcc-win64 コンパイラは将来のリリースで削除されます。サポート対象のコンパイラについては、https://www.mathworks.com/support/requirements/supported-compilers.htmlを参照してください。

メモ

Linux® システムで、インストール済みの C コンパイラがあることを確認してください。ある場合、Linux フォルダー構文を使用して演習を終了できます。

my_ert_target は、テンプレート makefile ベースのビルドもサポートします。テンプレート makefile アプローチによるこのターゲットの使用の詳細については、ERT ベースのテンプレート makefile の作成を参照してください。

ERT ターゲットと互換性のあるモデルを使用して my_ert_target をテストできます (システム ターゲット ファイルの構成 (Embedded Coder)を参照)。生成されたプログラムは、ERT によって生成されたプログラムとまったく同様に動作します。

ターゲットのテストを簡略化するために、非常に簡単な固定ステップ モデル targetmodel を使用してテストすることをお勧めします (テスト モデルと S-Function の作成を参照)。targetmodel 内の S-Function ブロックは、timestwo サンプルのソース コードを使用し、完全にインラインなコードを生成します。timestwo の S-Function 例に関する詳細な説明については、S-Function ExamplesおよびTLC での S-Function のインライン化を参照してください。

ターゲット フォルダーの作成

推奨される規則に従って、ターゲット ファイルを保存するためのフォルダーを作成し、MATLAB パスに追加します (フォルダーおよびファイルの命名規則を参照)。また、テスト モデル、S-Function および生成されたコードを保存するためのフォルダーも作成します。

このサンプルでは、ターゲット フォルダーとモデル フォルダーがフォルダー c:/work 内にあることを前提としています。ターゲット フォルダーとモデル フォルダーを MATLAB フォルダー ツリー内 (つまり、matlabroot フォルダー内またはその配下) に配置しないでください。

フォルダーを作成し、アクセス可能な状態にするには、次を行います。

  1. ターゲット ルート フォルダー my_ert_target を作成します。Windows プラットフォームの MATLAB コマンド ウィンドウに以下を入力します。

    cd c:/work
    mkdir my_ert_target
  2. ターゲット ルート フォルダー内に、ターゲット ファイルを保存するサブフォルダーを作成します。

    mkdir my_ert_target/my_ert_target
  3. これらのフォルダーを MATLAB パスに追加します。

    addpath c:/work/my_ert_target
    addpath c:/work/my_ert_target/my_ert_target
  4. テスト モデル、S-Function および生成されたコードを保存するためのフォルダー my_targetmodel を作成します。

    mkdir my_targetmodel

ERT ベースの、ツールチェーン準拠のシステム ターゲット ファイルの作成

ERT ターゲット用の標準のシステム ターゲット ファイルをコピーし変更して、独自のターゲット用のシステム ターゲット ファイルを作成します。その後、システム ターゲット ファイル ブラウザーおよび [コンフィギュレーション パラメーター] ダイアログ ボックス内に新しいターゲットを表示してシステム ターゲット ファイルを検証します。

システム ターゲット ファイルの編集.  システム ターゲット ファイルを編集するには、次の手順を使用します。

  1. 作業フォルダーをターゲット フォルダーの作成で作成したフォルダーに変更します。

    cd c:/work/my_ert_target/my_ert_target
  2. c:/work/my_ert_target/my_ert_targetmatlabroot/rtw/c/ert/ert.tlc のコピーを配置し、my_ert_target.tlc に名前を変更します。ファイル ert.tlc は ERT ターゲット用のシステム ターゲット ファイルです。

  3. 任意のテキスト エディターで my_ert_target.tlc を開きます。

  4. システム ターゲット ファイルをシステム ターゲット ファイル ブラウザーで表示可能にし、関連付けられている TMF、make コマンドおよびエクスターナル モードのインターフェイス ファイル (存在する場合) を定義するヘッダー コメント行を命令で置き換えて、システム ターゲット ファイルをカスタマイズします。これらの命令の詳細については、ヘッダー コメントを参照してください。

    my_ert_target.tlc のヘッダー コメントを以下のヘッダー コメントで置き換えます。

    %% SYSTLC: My ERT-based Target TMF: my_ert_target_lcc.tmf MAKE: make_rtw
  5. ファイル my_ert_target.tlc は、ターゲット オプションの継承で説明されているメカニズムを使用して標準の ERT オプションを継承します。したがって、既存の rtwoptions 構造体定義は必要ありません。RTW_OPTIONS 節を、以下のコードのみが含まれるように編集します。

    /%
      BEGIN_RTW_OPTIONS
    
      %----------------------------------------%
      % Configure RTW code generation settings %
      %----------------------------------------%
    
      rtwgensettings.BuildDirSuffix = '_ert_rtw';
    
      END_RTW_OPTIONS
     %/
  6. RTW_OPTIONS 節の末尾の後にある、命令 BEGIN_CONFIGSET_TARGET_COMPONENT and END_CONFIGSET_TARGET_COMPONENT で区切られたコードを削除します。このコードは、MathWorks 社内の開発者のみが使用するコードです。

  7. rtwgenSettings 構造体内のビルド フォルダーの添字をrtwgensettings 構造体で説明されている規則に従って変更します。

    添字を _my_ert_target カスタム ターゲットに文字ベクトルに設定するには、以下の行

    rtwgensettings.BuildDirSuffix = '_ert_rtw'

    を次のように変更します。

    rtwgensettings.BuildDirSuffix = '_my_ert_target_rtw'
    
  8. ERT ターゲットからオプションを継承し、rtwgensettings 構造体で説明されたように Release 14 以降との互換性を宣言するために rtwgenSettings 構造体を変更します。以下のコードを定義 rtwgenSettings に追加します。

    rtwgensettings.DerivedFrom = 'ert.tlc';
    rtwgensettings.Version = '1';
  9. 3 つのチェック ボックスのあるターゲット固有のオプションのカテゴリを定義する rtwoptions 構造体を BEGIN_RTW_OPTIONS 命令のすぐ後に追加します。以下のコードは、これまでの rtwgenSettings の変更を含む、完全な RTW_OPTIONS セクションを示しています。

    /%
      BEGIN_RTW_OPTIONS
    
      rtwoptions(1).prompt         = 'My Target Options';
      rtwoptions(1).type           = 'Category';
      rtwoptions(1).enable         = 'on';
      rtwoptions(1).default        = 3;   % number of items under this category
                                          % excluding this one.
      rtwoptions(1).popupstrings  = '';
      rtwoptions(1).tlcvariable   = '';
      rtwoptions(1).tooltip       = '';
      rtwoptions(1).callback      = '';
      rtwoptions(1).makevariable  = '';
    
      rtwoptions(2).prompt         = 'Demo option 1';
      rtwoptions(2).type           = 'Checkbox';
      rtwoptions(2).default        = 'off';
      rtwoptions(2).tlcvariable    = 'DummyOpt1';
      rtwoptions(2).makevariable   = '';
      rtwoptions(2).tooltip        = ['Demo option1 (non-functional)'];
      rtwoptions(2).callback       = '';
    
      rtwoptions(3).prompt         = 'Demo option 2';
      rtwoptions(3).type           = 'Checkbox';
      rtwoptions(3).default        = 'off';
      rtwoptions(3).tlcvariable    = 'DummyOpt2';
      rtwoptions(3).makevariable   = '';
      rtwoptions(3).tooltip        = ['Demo option2 (non-functional)'];
      rtwoptions(3).callback       = '';
    
      rtwoptions(4).prompt         = 'Demo option 3';
      rtwoptions(4).type           = 'Checkbox';
      rtwoptions(4).default        = 'off';
      rtwoptions(4).tlcvariable    = 'DummyOpt3';
      rtwoptions(4).makevariable   = '';
      rtwoptions(4).tooltip        = ['Demo option3 (non-functional)'];
      rtwoptions(4).callback       = '';
    
      %----------------------------------------%
      % Configure RTW code generation settings %
      %----------------------------------------%
    
      rtwgensettings.BuildDirSuffix = '_my_ert_target_rtw';
      rtwgensettings.DerivedFrom = 'ert.tlc';
      rtwgensettings.Version = '1';
      rtwgensettings.SelectCallback = 'enableToolchainCompliant(hSrc, hDlg)';
      %SelectCallback provides toolchain approach support, but requires custom function
      %Omit this SelectCallback if using the template makefile approach
    
      END_RTW_OPTIONS
    %/
  10. my_ert_target.tlc への変更内容を保存し、ファイルを閉じます。

関数 ToolchainCompliant の作成.  ツールチェーン アプローチを使用してビルドを有効にするには、カスタム システム ターゲット ファイルの終端付近の SelectCallback に対応する関数を作成します。この関数はツールチェーン準拠のプロパティを設定します。

function enableToolchainCompliant(hSrc, hDlg)
  % The following parameters enable toolchain compliance.
  slConfigUISetVal(hDlg, hSrc, 'UseToolchainInfoCompliant', 'on');
  slConfigUISetVal(hDlg, hSrc, 'GenerateMakefile','on');
  
  % The following parameters are not required for toolchain compliance.
  % But, it is recommended practice to set these default values and 
  % disable the parameters (as shown).
  slConfigUISetVal(hDlg, hSrc, 'RTWCompilerOptimization','off');
  slConfigUISetVal(hDlg, hSrc, 'MakeCommand','make_rtw');
  slConfigUISetEnabled(hDlg, hSrc, 'RTWCompilerOptimization',false);
  slConfigUISetEnabled(hDlg, hSrc, 'MakeCommand',false);
  hCS = hSrc.getConfigSet(); 
  hCS.refreshDialog; 
end

メモ

テンプレート makefile アプローチを使用する場合、システム ターゲット ファイルからツールチェーン準拠を有効にする関数の呼び出しを省略します。その代わり、ERT ベースのテンプレート makefile の作成に記載されている情報を使用します。

システム ターゲット ファイルの表示.  この時点では、ターゲットが ERT オプションを継承し表示できることを以下の手順で検証できます。

  1. 新しいモデルを作成します。

  2. モデル エクスプローラーまたは [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。

  3. [コード生成] ペインを選択します。

  4. [参照] をクリックし、システム ターゲット ファイル ブラウザーを開きます。

  5. ファイル ブラウザー内で、ターゲットのリストをスクロールして、新しいターゲット my_ert_target.tlc を探します (この手順では、ターゲット フォルダーの作成で事前に設定されたように MATLAB パスに c:/work/my_ert_target/my_ert_target が含まれていることを前提にしています)。

  6. My ERT-based Target を選択して、[OK] をクリックします。

  7. [コード生成] ペインには、ここで、モデルが my_ert_target.tlc ターゲット用に設定されていることが表示されます。[システム ターゲット ファイル][言語][ツールチェーン] および [ビルド構成] フィールドが以下のように表示されます。

  8. [My Target Options] ペインを選択します。ターゲットには、rtwoptions 構造体で定義された 3 つのチェック ボックス オプションが表示されます。

  9. [コード生成] ペインを選択し、システム ターゲット ファイル ブラウザーを再度開きます。

  10. Embedded Coder ターゲット (ert.tlc) を選択します。ターゲットには、標準の ERT オプションが表示されます。

  11. モデルを閉じます。モデルを保存する必要はありません。

骨格となるターゲットのシステム ターゲット ファイルが完成しました。ツールチェーン アプローチを使用する場合、ターゲットにビルド プロセスを呼び出す準備が整っています。

テンプレート makefile アプローチを使用する場合、システム ターゲット ファイル ヘッダー コメント内の TMF への参照 (my_ert_target_lcc.tmf) により、TMF ファイルが配置されるまで、ターゲットに対してビルド プロセスを呼び出すことはできません。最初に、my_ert_target_lcc.tmf ファイルを作成しなければなりません。

ERT ベースのテンプレート makefile の作成

ツールチェーン makefile アプローチをツールチェーン準拠のカスタム ターゲットで使用する場合、テンプレート makefile アプローチに適用される手順を省略します (このセクションをスキップします)。

テンプレート makefile アプローチを使用する場合、テンプレート makefile に適用される手順に従います。ERT ベースの、ツールチェーン準拠のシステム ターゲット ファイルの作成に記載されている、ツールチェーン準拠を有効にする関数をシステム ターゲット ファイルから呼び出す手順は省略します。

提供される ERT テンプレート makefile をコピーおよび変更して、ターゲットのテンプレート makefile を作成します。ターゲットに最も適合するテンプレート makefile を選択します。この例では ert_lcc64.tmf を使用しますが、ert_vcx64.tmf または ert_unix.tmf も使用できます。

  1. 作業フォルダーが、ターゲット フォルダーの作成で以前に作成したターゲット ファイル フォルダーに設定されたままであることを確認します。

    c:/work/my_ert_target/my_ert_target
  2. c:/work/my_ert_target/my_ert_targetmatlabroot/toolbox/coder/compile/tmf/ert_lcc64.tmf のコピーを配置し、my_ert_target_lcc.tmf に名前を変更します。ert_lcc64.tmf ファイルは、LCC コンパイラ用のコンパイラ固有の ERT テンプレート makefile です。

  3. テキスト エディターで my_ert_target_lcc.tmf を開きます。

  4. SYS_TARGET_FILE パラメーターを変更して、.tlc ファイルのファイル参照が make ファイルに生成されるようにします。以下の行

    SYS_TARGET_FILE = any

    を次のように変更します。

    SYS_TARGET_FILE = my_ert_target.tlc
  5. my_ert_target_lcc.tmf への変更内容を保存し、ファイルを閉じます。

これで、ターゲットによる、コードとホスト ベースの実行可能ファイルの生成ができるようになりました。次の節では、テスト モデルを作成し、my_ert_target を使用してビルド プロセスをテストします。

テスト モデルと S-Function の作成

この節では、後に行うコード生成で使用するための簡単なテスト モデルをビルドします。

  1. 作業フォルダーを c:/work/my_targetmodel に設定します。

    cd c:/work/my_targetmodel

    このチュートリアルでは、my_targetmodel が作業フォルダーであることが前提とされていることに注意してください。作成中のターゲットは、作業フォルダー内のビルド フォルダーにコード生成プロセスの出力ファイルを書き込みます。timestwo S-Function 用のインライン コードの生成時には、ビルド プロセスによって、作業フォルダー内にある S-Function の TLC 実装が検索されます。

  2. 以下の timestwo S-Function 用の C ファイルおよび TLC ファイルを作業フォルダーにコピーします。

    • matlabroot/toolbox/simulink/simdemos/simfeatures/src/timestwo.c

    • matlabroot/toolbox/simulink/simdemos/simfeatures/tlc_c/timestwo.tlc

  3. timestwo MEX ファイルを c:/work/my_targetmodel にビルドします。

    mex timestwo.c
  4. Simulink® ユーザー定義の関数ライブラリの S-Function ブロックを使用して以下のモデルを作成します。モデルを作業フォルダーに targetmodel として保存します。

  5. S-Function ブロックをダブルクリックして [ブロック パラメーター] ダイアログ ボックスを開きます。S-Function の名前 timestwo を入力します。[OK] をクリックします。これで、ブロックは timestwo MEX ファイルにバインドされます。

  6. モデル エクスプローラーまたは [コンフィギュレーション パラメーター] ダイアログ ボックスを開いて、[ソルバー] ペインを選択します。

  7. ソルバーの [タイプ][固定ステップ] に設定し、[適用] をクリックします。

  8. モデルを保存します。

  9. スコープを開き、シミュレーションを実行します。timestwo S-Function の入力が 2 倍になったことを確認します。

次の節で使用するために targetmodel モデルは開いたままにしておいてください。次の節では、テスト モデルを使用してコードを生成します。

ターゲットの動作の確認

この節では、my_ert_target カスタム ターゲット用に targetmodel を設定し、そのターゲットを使用してコードの生成と実行可能ファイルのビルドを行います。

  1. [コンフィギュレーション パラメーター] ダイアログ ボックスで、[コード生成] ペインを選択します。

  2. [参照] をクリックし、システム ターゲット ファイル ブラウザーを開きます。

  3. ブラウザーで My ERT-based Target を選択し、[OK] をクリックします。

  4. これで、[コンフィギュレーション パラメーター] ダイアログ ボックスには、my_ert_target[コード生成] ペインが表示されます。

  5. [コード生成][レポート] ペインで、[コード生成レポートを作成] オプションを選択します。

  6. [適用] をクリックしてモデルを保存します。モデルが my_ert_target 用に設定されます。

  7. モデルを作成します。ビルドに成功すると、MATLAB コマンド ウィンドウに以下のメッセージが表示されます。

    ### Created executable: ../targetmodel.exe
    ### Successful completion of build procedure for model:
    targetmodel

    作業フォルダーには、targetmodel.exe ファイルとビルド フォルダー targetmodel_my_ert_target_rtw があります。このビルド フォルダーには、生成されたコードとその他のファイルが含まれています。作業フォルダーには、slprj フォルダーも含まれています。このフォルダーはビルド プロセスによって内部的に使用されます。

    コード ジェネレーターによって、コード生成レポートも作成されます。

  8. 生成されたコードを表示するには [C コード] タブで [コードの表示] をクリックします。コード生成レポートの [コンテンツ] ペインで targetmodel.c リンクをクリックします。

  9. targetmodel.c でモデル ステップ関数 targetmodel_step を探します。以下のコードを確認してください。

    /* S-Function Block: <Root>/S-Function */
    /* Multiply input by two */
    targetmodel_B.SFunction = targetmodel_B.SineWave * 2.0;

    このコードが存在することで、my_ert_target カスタム ターゲットが、モデルの S-Function ブロック用のインライン出力計算を生成したことが確認できます。

関連するトピック