2012年5月2日水曜日

システム ターゲット ファイルをカスタマイズする :: カスタム ターゲットの開発 (Simulink® Coder™)


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

システム ターゲット ファイル (STF) は、ビルド プロセスのコード生成フェーズの全体的な制御を行います。また、STF を使用すると、エンド ユーザーへのターゲットの表示方法も制御できます。STF には、以下のような情報があります。

  • 生成するコード形式など、ビルド プロセスに不可欠な変数の定義

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

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

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

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

この章には、STF の構造体に関する情報、STF をカスタマイズする場合のガイドライン、骨格となる STF を作成および実行するために役立つ基本的なチュートリアルが記載されています。

STF は、Target Language Compiler (TLC) ファイルですが、組み込み MATLAB コードが含まれていることに注意してください。STF の作成または変更を行うには、TLC および MATLAB 言語に関する実用的な知識が必要です。『Simulink Coder Target Language Compiler』ドキュメンテーションと MATLAB ドキュメンテーションの「関数とスクリプト」の節には、TLC および MATLAB 言語の機能と構文が説明されています。

この章を参照する場合に、Simulink Coder 製品に対して用意されている STF を参照しなければならない場合があります。これらのファイルは、ほとんどの場合、matlabroot/rtw/c 内のターゲット固有のフォルダー内に格納されています。追加の STF は、matlabroot/toolbox/rtw/targets 内に格納されています。

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

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

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

概要

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

%%----------------------------   %% Header Comments Section  %%----------------------------   %% SYSTLC: Example Real-Time Target   %%    TMF: my_target.tmf MAKE: make_rtw EXTMODE: ext_comm   %% Inital 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"  %%   %%----------------------------   %% (OPTIONAL) Import Target Settings   %%----------------------------   %include "mytarget_settings.tlc"  %%   %%----------------------------   %% 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 string 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  %/

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

ヘッダー コメント

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

コメントの存在によって、Simulink Coder ソフトウェアによる STF が検出できるようになります。システム ターゲット ファイル ブラウザーの起動時に、Simulink Coder ソフトウェアによって MATLAB パスがスキャンされ適切に書式化されたヘッダー コメントのある TLC ファイルの検出が行われます。コメントには、以下の命令が含まれます。

  • SYSTLC:この文字列は、ブラウザーに表示される記述子です。

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

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

  • EXTMODE:ターゲットに関連付けられているエクスターナル モード インターフェイス ファイルがある場合、そのファイル名。ターゲットがエクスターナル モードをサポートしていない場合は、no_ext_comm を使用します。

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

%% SYSTLC: Embedded Coder TMF: ert_default_tmf MAKE: make_rtw \  %%    EXTMODE: ext_comm  %% SYSTLC: Create Visual C/C++ Solution File for the Embedded Coder\  %%    TMF: RTW.MSVCBuild MAKE: make_rtw EXTMODE: ext_comm  .  .  .

    メモ:   制限:前述の例のとおり、コメントごとの最大行数は 2 行です。

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

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

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

STF のこの節では、全体的なコード生成プロセスに影響を及ぼすグローバル TLC 変数が割り当てられます。

組み込みターゲットでは、ほとんどの場合、ERT ターゲット (ert.tlc) が使用しているグローバル変数設定を使用しなければなりません。使用する STF が組み込み C コード形式を選択していることが特に重要です。以下の変数に値が割り当てられていることを確認します。

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

    コード形式の詳細は、Simulink Coder ドキュメンテーションの「ターゲットとコード形式」を参照してください。

  • Language: 有効な値は C のみです。この値は、コンフィギュレーション パラメーター TargetLang による指定に従って C または C++ コード生成をサポートします (詳細は、Simulink Coder ドキュメンテーションの「パラメーター コマンド ライン情報の概要」にある TargetLang エントリを参照してください)。

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

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

    %assign TargetType = "RT"

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

    %assign TargetType = "NRT"

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

コード生成プロセスは、通常、codegenentry.tlc. で開始されます。STF は、以下のように codegenentry.tlc を起動します。

%include "codegenentry.tlc"

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

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

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

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

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

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

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

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

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

  • commonentry.tlc: CodeFormat によって指定された形式でコードの生成プロセスを開始します。

RTW_OPTIONS 節

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

/%    BEGIN_RTW_OPTIONS  .  .  .    END_RTW_OPTIONS  %/

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


なぜ、チームのビジネスを使用し

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

rtwgensettings 構造体

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

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

      メモ:   コールバックを使用するには、以下を設定しなければなりません

      rtwgensettings.Version = '1';  

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

  • rtwgensettings.DerivedFrom: この文字列プロパティは、継承されるオプションからシステム ターゲット ファイルを定義します。「ターゲット オプションの継承」を参照してください。

  • rtwgensettings.SelectCallback: このプロパティは、関数 SelectCallback を指定します。rtwgensettings.Version = '1'; を設定しないとコールバックは無視されます。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 を以下のように定義した場合、

    rtwgensettings.BuildDirSuffix = '_mytarget_rtw'

    ビルド フォルダーには、model_mytarget_rtw という名前が付けられます。

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

Simulink Coder ドキュメンテーションの 「TLC による生成コードの設定」には、追加の TLC コード生成変数についての説明が記載されています。ターゲットのエンド ユーザーは、以下の形式のステートメントを入力することによって、これらの変数を割り当てられます。

-aVariable=val

この入力は、[コード生成] ペインの [TLC オプション] フィールドで行います。

ただし、STF 内でこれらの変数を割り当てるための推奨される手法は、以下の形式のステートメントを使用する手法です。

%assign Variable = val

これらの割り当ては、STF でコメント Configure RTW code generation settings を入力した後の節に追加して、読みやすくすることをお勧めします。

モデル参照の注意事項

Simulink Coder モデル参照機能をサポートするために行う必要のある STF およびその他の変更に関する重要な情報は、「モデル参照のサポート」を参照してください。

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

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

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

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

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

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

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

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

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

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

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

サンプル rtwoptions 構造体-  以下のサンプルは、S-Function ターゲットの STF である matlabroot/rtw/c/rtwsfcn/rtwsfcn.tlc からの抜粋です。このコードは、3 つの要素のある rtwoptions 構造体配列を定義しています。最初の (ヘッダー) 要素の既定のフィールドは、4 に設定されています。これは、ヘッダーに続く要素の数を示しています。

rtwoptions(1).prompt        = 'S-Function Target';  rtwoptions(1).type          = 'Category';  rtwoptions(1).enable        = 'on';    rtwoptions(1).default       = 4;   % 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         = 'Create new model';  rtwoptions(2).type           = 'Checkbox';  rtwoptions(2).default        = 'on';  rtwoptions(2).tlcvariable    = 'CreateModel';  rtwoptions(2).makevariable   = 'CREATEMODEL';  rtwoptions(2).tooltip        = ...    ['Create a new model containing the generated S-Function    block inside it'];    rtwoptions(3).prompt         = 'Use value for tunable parameters';  rtwoptions(3).type           = 'Checkbox';  rtwoptions(3).default        = 'off';  rtwoptions(3).tlcvariable    = 'UseParamValues';  rtwoptions(3).makevariable   = 'USEPARAMVALUES';  rtwoptions(3).tooltip        = ...    ['Use value for variable instead of variable name in generated block mask    edit fields'];    % Override the default setting for model name prefixing because  % the generated S-function is typically used in multiple models.  rtwoptions(4).default       = 'on';  rtwoptions(4).tlcvariable   = 'PrefixModelToSubsysFcnNames';    rtwoptions(5).prompt         = 'Include custom source code';  rtwoptions(5).type           = 'Checkbox';  rtwoptions(5).default        = 'off';  rtwoptions(5).tlcvariable    = 'AlwaysIncludeCustomSrc';  rtwoptions(5).tooltip        = ...    ['Always include provided custom source code in the generated code'];  

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

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

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

ターゲット固有の rtwoptions 定義以外のサンプルは、「カスタマイズ済み rtwoptions を使用するサンプル システム ターゲット ファイル」を参照してください。

「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 要素を使用すると、ダイアログ ボックスの開閉時に、ユーザー インターフェイスのいずれの要素にも関連しないコールバックを実行できます。NonUI 要素のフィールドのうち opencallback および closecallback フィールドのみが意味をもちます。例については、次の節「カスタマイズ済み rtwoptions を使用するサンプル システム ターゲット ファイル」を参照してください。

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

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

サンプル ターゲット ファイルは、次のフォルダーに格納されています。

matlabroot/toolbox/rtw/rtwdemos/rtwoptions_demo

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

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

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

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

  • [Execution Mode] メニュー。

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

  • [Real-Time Interrupt Source] メニュー。このメニューは、外部ファイル usertargetcallback.m で定義されているコールバックを実行します。このメニューに関連付けられている TLC 変数は、コールバックに渡され、メニューの現在の値を表示します。

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

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

  1. matlabroot/toolbox/rtw/rtwdemos/rtwoptions_demo を作業フォルダーにします。

  2. 使用する任意のモデルを開きます。

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

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

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

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

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

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

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

以下のように rtwgensettings.DerivedFrom プロパティを設定します。

rtwgensettings.DerivedFrom = 'stf.tlc';

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

rtwgensettings.DerivedFrom = 'ert.tlc';

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

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

これらのオプションは、mytarget_settings.tlc で処理することをお勧めします。「mytarget_settings.tlc の使用」の例を参照してください。

作成中のターゲットではすべての継承済みの ERT オプションがサポートされていない場合でも、それらの ERT オプションは、GUI の [コード生成] ペイン内に保持されていなければなりません。STF の rtwoptions 構造体からのサポートされていないオプションの単純な削除は行わないでください。オプションは、Simulink Coder ソフトウェアが最適化を実行するときにこのソフトウェアによってスキャンされるために GUI になければなりません。

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

STF をカスタマイズするためのヒントと手法

はじめに

この節では、以下の内容を含む、STF をカスタマイズするための手法が説明されています。

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

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

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

必要となる TLC 環境の STF によるセットアップが完了したら、codegenentry.tlc を含めて、標準のコード生成プロセスが起動するようにします。

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

mytarget_settings.tlc の使用-  このファイルはオプションです。このファイルの目的は、コード生成環境内のグローバルな設定を中央管理することにあります。 mytarget_settings.tlc は、以下の目的で使用します。

  • 必要な TLC パスを %addincludepath 命令を使用して定義する。ターゲット固有の TLC 関数ライブラリを作成する場合、この定義を行わなければならない場合があります。

  • ターゲット固有のパス情報およびユーザー設定を CompiledModel の一般レコード保存するレコードを作成する。これによって、この情報を TLC コード生成環境に引き渡すための明解なメカニズムが使用できます。

  • コード生成オプションのユーザー設定を確認する。適切でないオプション設定やサポートされていないオプション設定が検出された場合、適切なエラーまたは警告を発効し、必要に応じてビルド プロセスを中止します。

mytarget_settings.tlc サンプル コード-  

以下の TLC コードのサンプルでは、構造体 Settings が CompiledModel レコードに追加されます。Settings 構造体は、保存済みのターゲット設定から読み込まれます。Settings 構造体には、ターゲット設定データ フィールド ImplementationImpPath が格納されています。

SettingsCompiledModel レコードへの追加後に、サンプル コードによって継承済みのオプションが処理されます。このサンプルでは、ターゲットに ERT ターゲットから継承されたオプションがあることを前提としています。コードによって、継承済みの ERT コード生成オプションの設定が検証されます。ユーザーによって、サポートされていないオプションが選択された場合、警告またはエラー メッセージが表示されます。場合によっては、サポートされていないオプションを選択すると、ビルド プロセスが終了することもあります。

関数の末尾にある条件付きコードによって、MATLAB コマンド ウィンドウに Implementation フィールドと ImpPath フィールドが表示されます。


会社の市場調査アンケートトップ
%selectfile NULL_FILE    %% Read user preferences for the target and add to CompiledModel  %assign prefs = FEVAL("RTW.TargetPrefs.load","mytarget.prefs","structure")  %addtorecord CompiledModel Settings prefs    %% Check for unsupported Embedded Coder options and error/warn appropriately  %if SuppressErrorStatus == 0     %assign SuppressErrorStatus = 1    %assign msg = "Suppressing Error Status as it is not used by this target."    %warning %  %endif  %if GenerateSampleERTMain == 1    %assign msg = "Generating an example main is not supported as the proper main   function is inherently generated. Unselect the \"Generate an example main program\"   checkbox under ERT code generation options."    %exit %  %endif    %if GenerateErtSFunction == 1    %assign msg = "Generating a Simulink S-Function is not supported. Unselect the   \"Create SIL block\" checkbox under ERT code generation options."    %exit %  %endif    %if ExtMode == 1    %assign msg = "External Mode is not currently supported. Unselect the \"External   mode\" checkbox under ERT code generation options."    %exit %  %endif    %if MatFileLogging == 1    %assign msg = "MAT-file logging is not currently supported. Unselect the   \"MAT-file logging\" checkbox under ERT code generation options."    %exit %  %endif    %if MultiInstanceERTCode == 1    %assign msg = "Generate reuseable code is not currently supported. Unselect the   \"Generate reuseable code\" checkbox under ERT code generation options."    %exit %  %endif      %if TargetFunctionLibrary == "ISO_C"    %assign msg = "Target function libraries other than ANSI-C are not   currently supported. Select ANSI-C for the \"Target function library\" option  under ERT code generation options."    %exit %  %endif      %% To display added TLC settings for debugging purposes, set EchoConfigSettings to   1.  %assign EchoConfigSettings = 0  %if EchoConfigSettings    %selectfile STDOUT    ###############################################################        IMPLEMENTATION is:    %        IMPLEMENTATION path is:       %        ###############################################################    %selectfile NULL_FILE  %endif

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

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

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

%selectfile NULL_FILE    %assign ModelName = CompiledModel.Name    %% Create Debugger script  %assign model_script_file = "%.cfg"  %assign script_file = "debugger_script_template.tlc"    %if RTWVerbose     %selectfile STDOUT     ### Creating %     %selectfile NULL_FILE  %endif    %include "%"  %openfile bld_file = "%"  %  %closefile bld_file

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

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

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

result = RTW.isHWDeviceTypeEq(type1, type2)

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

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

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

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

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

result = RTW.resolveHWDeviceType(type)

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

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

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

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

RTW.isTflEq-  2 つのターゲット関数ライブラリ (TFL) 文字列が同じ TFL を表しているかどうかをテストするために、以下の関数を起動します。

result = RTW.isTflEq(name1, name2)

上記で、name1 および name2 は、TFL 値またはエイリアスを含む文字列を示します。

関数 RTW.isTflEq は、name1name2 が同じ TFL を表す文字列である場合、true を返します。たとえば、次の呼び出しは true を返します。

RTW.isTflEq('ANSI_C', 'C89/C90 (ANSI)')

TFL オプション TargetFunctionLibrary の説明は、Simulink Coder の参照ドキュメンテーション内の [インターフェイス] ペイン オプション 「ターゲット関数ライブラリ」 に関するコマンド ライン情報を参照してください。

RTW.resolveTflName-  値がエイリアス値またはレガシ値である可能性がある場合にターゲット関数ライブラリの TFL 値を返すには、以下の関数を起動します。

result = RTW.resolveTflName(name)

上記で、name は、TFL 値またはエイリアスを含む文字列です。

関数 RTW.resolveTflName は、参照される TFL の TFL 値を返します。たとえば、以下の呼び出しは、いずれも 'C89/C90 (ANSI)' を返します。

RTW.resolveTflName('ANSI_C')  RTW.resolveTflName('C89/C90 (ANSI)')

TFL オプション TargetFunctionLibrary の説明は、Simulink Coder の参照ドキュメンテーション内の [インターフェイス] ペイン オプション 「ターゲット関数ライブラリ」 に関するコマンド ライン情報を参照してください。

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

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

この要件を満たす方法として、各開発環境に適したテンプレート makefile を起動する複数の STF を実装する方法が挙げられます。この方法では、2 つの異なるターゲットが得られます。

もう 1 つの方法として、コメント ヘッダー内で複数構成を指定する単一の STF を使用する方法があります。この場合、STF 内のコードによって、ターゲット設定が確認され、どのテンプレート makefile を起動するかが決定されます。この情報をターゲット設定で確認する方法の例は、「mytarget_default_tmf.m のコード例」を参照してください。

単一の STF ファイルをこのように使用する場合の欠点は、STF がサポートするすべての構成のターゲット オプションが同じでない場合に rtwoptions に条件付き節が必要になることです。以下の例 (バーチャルなサンプル ターゲットからの) では、rtwoptions メニュー要素を MATLAB ソフトウェアが PC (Microsoft Windows プラットフォーム) で実行されているかどうかによって異なる方法で定義しています。プラットフォームが PC であるかどうかは、MATLAB 関数 ispc を呼び出すことで判定されます。PC 上では、ターゲット デバイスとの通信に USB を使用するか、シリアル ポートを使用するかの選択がメニューに表示されます。それ以外のプラットフォームの場合、UNIX[1] 論理デバイスの選択肢が表示されます。

if ispc    rtwoptions(rtwoption_index).default      = 'USB';    rtwoptions(rtwoption_index).popupstrings =   'USB|COM1|COM2|COM3|COM4';  else    rtwoptions(rtwoption_index).default      = '/dev/ttyS0';    rtwoptions(rtwoption_index).popupstrings =  '/dev/ttyS0|/dev/ttyS1|/dev/ttyS2|/dev/ttyS3';  end

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

はじめに

このチュートリアルは、「カスタム ターゲットの例」で説明されたサンプル ターゲット ガイドを補足するものです。概要とおよび検証するサンプル ファイルについては、サンプル ターゲットをまず行ってください。

このチュートリアルの目的は、ERT ベースのターゲット my_ert_target を作成するプロセスを順を追って説明することにあります。この練習では、カスタム ターゲットの作成時に通常必要な次のようなタスクについて説明します。

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

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

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

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

my_ert_target の概要

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

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

my_ert_target は、makefile ベースのビルドをサポートし、ホスト システム上で実行するコードおよび実行可能ファイルを生成します。my_ert_target は、Microsoft Windows プラットフォームで LCC コンパイラを使用します。このコンパイラは、入手が簡単であることと、Simulink Coder 製品に同梱されていることから選択されています。他のコンパイラを使用している場合、以下の MATLAB コマンドを入力すると LCC を一時的に既定コンパイラとして設定できます。

mex -setup

表示されるプロンプトの指示に従い、LCC を選択します。

    メモ:    UNIX[2] システムでは、C コンパイラがインストールされていることを確認してください。確認したら、適切な UNIX フォルダー構文を置き換えてこの練習を行います。

ERT ターゲットと互換性のある任意のモデルを使用して my_ert_target をテストできます (Embedded Coder ドキュメンテーションの 「Target」 を参照)。生成されたプログラムは、ERT によって生成されたプログラムとまったく同様に動作します。

ただし、ターゲットのテストを簡素化するために、非常に簡単な固定ステップ モデル targetmodel.mdl を使用してテストすることをお勧めします (「テスト モデルと S-Function の作成」を参照)。targetmodel.mdl 内の S-Function ブロックは、timestwo サンプルのソース コードを使用し、完全にインラインなコードを生成します。timestwo サンプルの S-Function の詳細は、Simulink の『Writing S-Function』ドキュメンテーションおよび「Simulink Coder Target Language Compiler」ドキュメンテーションを参照してください。

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

この節では、推奨される規則 (「フォルダーおよびファイルの命名規則」を参照) に従ってターゲット ファイルを保存するためのフォルダーを作成し、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 ベースの STF の作成

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

STF の編集-  STF を編集するには、以下の手順を行います。

  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 ターゲットの STF です。

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

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

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

    %% SYSTLC: My ERT-based Target TMF: my_ert_target_lcc.tmf MAKE: make_rtw \  %%    EXTMODE: no_ext_comm
  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';      END_RTW_OPTIONS   %/
  10. my_ert_target.tlc への変更内容を保存し、ファイルを閉じます。

STF の表示-  この時点では、ターゲットが 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 ターゲット用に設定されていることが表示されます。[システム ターゲット ファイル][Make コマンド]、および [テンプレート makefile] の各フィールドは以下のように表示されなければなりません。

  8. [My Target Options] ペインを選択し、以下の図で示されたように、ターゲットが rtwoptions 構造体で定義済みの 3 つのチェック ボックス オプションを表示しているかどうか確認します。

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

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

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

これで、骨格となるターゲットの STF が完成しました。ただし、STF ヘッダー コメントが TMF my_ert_target_lcc.tmf を参照していることに注意してください。TMF ファイルが配置されるまで、作成したターゲット用のビルド プロセスは起動できません。次の節では、my_ert_target_lcc.tmf を作成します。

ERT ベースの TMF の作成

この節では、LLC コンパイラ向けの標準 ERT TMF をコピーおよび変更して、作成中のターゲット用の TMF を作成します。

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

    c:/work/my_ert_target/my_ert_target

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

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

  4. SYS_TARGET_FILE パラメーターを変更して、適切なファイル参照が 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 ファイルを作業フォルダーにコピーします。

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

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

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

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

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

  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. 生成済みのモデル コードを表示するには、コード生成レポートのウィンドウに移動します。[コンテンツ] ペインで targetmodel.c のリンクをクリックします。

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

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

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


[1] UNIX is a registered trademark of The Open Group in the United States and other countries.

[2] UNIX is a registered trademark of The Open Group in the United States and other countries.



These are our most popular posts:

システム ターゲット ファイルをカスタマイズする :: カスタム ターゲットの ...

ターゲット固有のコード生成オプション (およびビルド プロセスに影響を及ぼすその他の パラメーター) の定義、およびそれらのオプションやパラメーターの [コンフィギュ レーション パラメーター] ... STF の作成または変更を行うには、TLC および MATLAB 言語に関する実用的な知識が必要です。 .... これらのグループは、それぞれ異なる ターゲット コンフィギュレーションとしてシステム ターゲット ファイル ブラウザーに表示 されます。上記の例 ... read more

広告プレースメントの概要と作成方法 - AdSense ヘルプ

... メントとは、広告主がプレースメント ターゲットを使用して広告の掲載場所に指定 できる、個別の広告ユニットのグループです。 ... Google のクローラにページへの アクセスを許可するにはどうすればよいですか。 ... ベース広告のプライバシー ポリシー を変更する インタレスト ベース広告とプレースメント ターゲット広告の違いは何ですか ? ... サイト運営者様はカスタム チャネルを使用して、独自の広告プレースメントを定義 できます。 read more

[調査]中国の低所得層 - KANTAR JAPAN

... セグメントです。 BOPの定義. 「Bottom or base of the Pyramid」という言葉は、多くの 異なる意味で使用され、様々な定義と解釈がなされてきました。 ... 我々のいうターゲット グループは、ピラミッドの「下位中流」層 - 生活必需品+αを購入するお金を持っている 人々 - です。世界資源研究所* ... 中国におけるBOPは誰ですか? 中国のBOPは、どの ... read more

ヘビーローテーション / ノヤン先生のマーケティング講座 / マーケティング ...

2012年3月27日 ... マーケティングキャンパスは基礎から実践までBtoBマーケティングを学ぶサイトです。 ... 理由を聴いてみると、なんとこれはアイドルグループのヒットソングの曲名なんだそうな・・ ・驚いたもんじゃの。 ... セグメンテーション(S)で市場を細分化し、ターゲティング(T)で ターゲットセグメント(勝てる土俵)を定義し、そのターゲットセグメントに ... read more

0 件のコメント:

コメントを投稿