Main Content

TLC ファイル

TLC プログラム

Target Language Compiler (TLC) は、Simulink® ソフトウェアと連携してコードを生成します。

"TLC プログラム""スクリプト" と呼ばれる ASCII ファイルの集まりです。TLC はインタープリター型言語であるため、オブジェクト ファイルはありません。プログラムに使用される他のターゲット ファイルを (%include 命令で) 呼び出す単一のターゲット ファイルを "エントリ ポイント" と呼びます。

使用可能なターゲット ファイル

TLC は、一連のターゲット ファイルを解釈し、Simulink モデルの部分表現 (model.rtw) をターゲット固有のコードに変換します。

ターゲット ファイルは、コンパイラで生成されたコードをカスタマイズするための柔軟性を提供します。たとえば、使用可能なシステム ターゲット ファイルを使用すると、Simulink モデルから汎用の C または C++ コードが生成されます。この実行可能コードはプラットフォーム固有ではありません。

メモ

それを行う機能がありますが、TLC ファイルをカスタマイズしないでください。このような TLC のカスタマイズはコード生成プロセス中に適用されない可能性があり、予期しない結果になることがあります。カスタマイズするのは、自分で作成した TLC ファイルだけにしてください。

ターゲット ファイル内のパラメーターは、model.rtw ファイルから読み取られ、ブロックのスコープ ルールを使用して参照されます。%assign ステートメントを使用して、ターゲット ファイル内で追加のパラメーターを定義できます。

ターゲット ファイルはターゲット言語の命令を使用して記述します。ブロックのスコープ ルールとターゲット言語の命令の詳細については、Target Language Compiler Directivesで説明しています。

model.rtw ファイルとスコープでは、ターゲット ファイルの作成や変更に便利な model.rtw ファイルについて説明しています。

コード生成のコンテキストに関連するターゲット ファイルは 2 種類あります。

  • システム ターゲット ファイル

    システム ターゲット ファイルは、コード生成の全体的なフレームワークを決定します。ブロックをいつ実行するかや、ログ データをどのように記録するかなどが決まります。

  • ブロック ターゲット ファイル

    各ブロックに、そのブロックのコードをどのように生成するかを決めるターゲット ファイルがあります。ブロックの正確なパラメーターや接続のタイプ (幅のある入力かスカラー入力かなど) に応じて、コードはさまざまに異なります。詳細については、ブロック ターゲット ファイルのメソッドを参照してください。

モデル全体のターゲット ファイルとシステム ターゲット ファイル

モデル全体のターゲット ファイルは、モデル単位で全体に対して使用します。モデル全体のターゲット ファイルは、model.rtw ファイルをターゲット固有のコードに変換するための基本的な情報を TLC に提供します。

システム ターゲット ファイルは、TLC のエントリ ポイントです。C プログラムの main() ルーチンに似ています。システム ターゲット ファイルは、コード生成プロセス全体を対象とします。たとえば、システム ターゲット ファイル grt.tlc は、システム ターゲット ファイルのエントリ ポイントとなる codegenentry.tlc のいくつかの変数を設定します。使用可能なシステム ターゲット ファイルの完全な一覧については、製品間でのシステム ターゲット ファイルのサポートの比較を参照してください。

ターゲット ファイルの用途

ターゲット ファイルは次の目的に使用します。

  • S-Function のインライン化

    S-Function のインライン化とは、その S-Function ブロックのコードをどのように生成するかを TLC に指示するブロック ターゲット ファイルを記述することを意味します。コンパイラでは、インラインでない C MEX S-Function のコードを生成できます。C MEX S-Function をインライン化すると、より効率的なコードをコンパイラで生成できます。インラインでない C MEX S-Function は、S-Function のアプリケーション プログラム インターフェイス (API) を使用して実行され、非効率になる可能性があります。MATLAB® ファイルまたは Fortran S-Function をインライン化できます。どちらの場合も TLC で S-Function のコードを生成できます。

  • すべてのモデルに対する生成コードのカスタマイズ

    生成コードをプロファイリング用にインストルメント化したり、すべてのモデル用の全体的なコード生成について他の変更を加えたりする場合があります。このような変更を行うには、システム ターゲット ファイルの一部を変更します。

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

全体のコード生成プロセスは、[コンフィギュレーション パラメーター] ダイアログ ボックスの [コード生成] ペインで指定した単一のシステム ターゲット ファイルから始まります。[参照] ボタンをクリックすると、そのためのシステム ターゲット ファイル ブラウザーがアクティブになります。システム ターゲット ファイルを詳しく調べることで、コード生成がどのように行われるかがわかります。次のリストは、汎用リアルタイム実行可能ファイルのコードを生成するターゲット ファイル grt.tlc のコメント以外の行を示したものです。

%selectfile NULL_FILE
%assign TargetType = "RT" 
%assign Language   = "C"  
%assign MatFileLogging = 1 
%include "codegenentry.tlc"

3 つの変数 LanguageTargetType、および MatFileLogging は、他の関数で使用されるグローバル TLC 変数です。この後に、コード生成のメイン エントリ ポイントである codegenentry.tlc を呼び出してコード生成が開始されます。

全体的なコード生成に変更を加える場合は、システム ターゲット ファイルを変更しなければなりません。初期設定の後、codegenentry.tlc を呼び出す代わりに、独自の TLC ファイルを呼び出す必要があります。次のコードは、mygrt.tlc というシステム ターゲット ファイルの例を示しています。

%% Set up variables, etc.
%% Load my library functions 
%% Note that mylib.tlc should %include funclib.tlc at the  
%% beginning. 
%include "mylib.tlc"  
%include "commonsetup.tlc"  

%% Next, you can include TLC files that you need for 
%% preprocessing information about the model and to fill in 
%% hooks. The following is an example of including a single
%% TLC file that contains custom hooks. 
%include "myhooks.tlc"  

%% Finally, call the code generator. 
%include "commonentry.tlc"

生成コードは、モデルまたはサブシステムの関数に配置されます。生成される関連する関数の名前とその実行順序については、モデルから生成されたコードの実行および生成された C 関数インターフェイスをモデルのエントリポイント関数用に構成で説明しています。コード生成時に、ブロック ターゲット ファイルのそれぞれから関数が実行され、モデルまたはサブシステムの関数に生成コードが配置されます。

TLC ファイルと生成コードのデータ型との互換性

コンフィギュレーション パラメーター DataTypeReplacement の値が 'CDataTypesFixedWidth' の場合、生成コードでは Simulink Coder™ のデータ型 (uint8_Treal_Tboolean_T など) が使用されません。代わりに、生成コードでは C99 言語規格のデータ型 (uint8_tdoublebool など) が使用されます。ハードコードされた Simulink Coder のデータ型のインスタンスが TLC ファイルに含まれている場合は、関数 coder.updateTlcForLanguageStandardTypes を使用してそのファイルを更新できます。この関数は、ハードコードされた Simulink Coder のデータ型のインスタンスを対応する API 呼び出しに置き換えることにより、指定された TLC ファイルを変更します。

コード生成時に、更新後の TLC コードは次を送出します。

  • DataTypeReplacement の値が 'CDataTypesFixedWidth' である場合は、C99 言語規格での名前

  • DataTypeReplacement の値が 'CoderTypedefs' である場合は、Simulink Coder のデータ型名

詳細については、以下を参照してください。

関連するトピック