このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
Simulink 環境内での統合コードのビルド
ワークフロー
生成コードと外部 C または C++ コードを統合する実行可能プログラムをビルドするには、次の表のタスクを反復します。
タスク | アクション | 詳細 |
---|---|---|
1 | ビルド アプローチを選択します。 | Simulink モデルから生成されたコードのビルドに使用するアプローチ 例については、リアルタイム システムのビルド プロセス ワークフローを参照してください。 |
2 | 外部コードのビルド プロセス サポートを構成します。 | |
3 | 外部コードの S-Function ビルド サポートを構成します。 | 生成される makefile を makecfg を使用して S-Function 用にカスタマイズする 例については、シミュレーションおよびコード生成のための再利用可能な外部アルゴリズム コードの呼び出しを参照してください。 |
4 | 外部コード ソース、ライブラリ、ヘッダー ファイルを検索するようビルド プロセスを構成します。 | |
5 | 外部コードの統合に必要なカスタムのビルド処理を設定します。 | ビルド プロセスのカスタマイズ ワークフローについては、コード生成後のビルド プロセスのカスタマイズを参照してください。 ビルド カスタマイズのツールチェーン アプローチ ビルドへの適用を自動化するには、sl_customization.m によるビルド プロセスのカスタマイズを参照してください。 ビルド カスタマイズのテンプレート makefile アプローチ ビルドへの適用を自動化するには、STF_make_rtw_hook ファイルによるビルド プロセスのカスタマイズを参照してください。 |
統合コード ビルド プロセスのパラメーターの構成
次の表に、外部コード統合のビルド プロセスをサポートする [モデル コンフィギュレーション パラメーター] ダイアログ ボックスの [コード生成] 、 [カスタム コード] ペインのモデル コンフィギュレーション パラメーターのガイドを示します。外部コードのフォルダーの詳細については、ビルド プロセスのフォルダーの管理を参照してください。Code generation folderに外部コードを配置する場合は、ビルド フォルダーでの外部コード ファイルの保持を参照してください。
目的 | 選択 |
---|---|
ヘッダー ファイルを含んでいるインクルード フォルダーをビルド プロセスに追加する | [コード情報] 、 [インクルード ディレクトリ] を選択し、フォルダーの絶対パスまたは相対パスを入力します。 相対パスを指定する場合、そのパスは、ビルド フォルダーではなく、モデル ファイルを含んでいるフォルダーに対して相対的でなければなりません。フォルダーを指定する順序は、ヘッダー、ソースおよびライブラリ ファイルが検索される順序です。 |
コンパイルおよびリンク対象のソース ファイルを追加する | [コード情報] 、 [ソース ファイル] を選択し、ファイルの絶対パスまたはファイル名のみを入力します。 ファイルが現在の MATLAB® フォルダーまたはインクルード フォルダーのいずれかにある場合、ファイル名のみを入力します。指定した追加のソースごとに、ビルド プロセスは、ソース ファイルが存在するフォルダーのテンプレート makefile に一般的なルールを拡張します。たとえば、ソース ファイルがフォルダー
%.obj: buildir\inc\%.c $(CC) -c -Fo$(@F) $(CFLAGS) $< ビルド プロセスは、ソース ファイルがリストされている順序でルールを追加します。 |
リンクするライブラリを追加する | [コード情報] 、 [ライブラリ] を選択し、ライブラリの絶対パスまたはファイル名のみを入力します。 ライブラリが現在の MATLAB フォルダーまたはインクルード フォルダーのいずれかにある場合、ファイル名のみを入力します。 |
MATLAB Function ブロック、Stateflow® チャートおよび Truth Table ブロックのシミュレーションに指定された設定と同じカスタム コード設定を使用する | [シミュレーション ターゲットと同じカスタム コードの設定を使用] を選択します。 このパラメーターは、[コンフィギュレーション パラメーター] ダイアログ ボックスの [シミュレーション ターゲット] ペインを参照します。 |
ライブラリがリンクしている親モデルから一意のカスタム コード設定をライブラリ モデルで使用できるようにする | [ローカルなカスタム コード設定を使用 (メイン モデルから継承しません)] を選択します。 このパラメーターは、MATLAB Function ブロック、Stateflow チャートまたは Truth Table ブロックを含むライブラリ モデルに対してのみ使用可能です。 |
ビルド フォルダーでの外部コード ファイルの保持
既定では、ビルド プロセスで外部のソース ファイルは削除されます。次のガイドラインに従って、外部ソース ファイルを保持できます。
.c/.cpp
または .h
ソース ファイルをビルド フォルダーに入れて、コード ジェネレーターで TLC コード生成プロセス時にこのソース ファイルが削除されないようにするには、.c/.cpp
または .h
ファイルの 1 行目にテキスト target specific file
を挿入します。以下に例を示します。
/* COMPANY-NAME target specific file * * This file is created for use with the * COMPANY-NAME target. * It is used for ... */ ...
前の例で示されているように、正確にテキスト "target specific file" を入力し、この文字列がソース ファイルの 1 行目に置かれるようにしてください。その他のテキストは、このテキストの前または後に表示されます。
この方法でユーザー ファイルにフラグを設定すると、ユーザー ファイルへの後処理が回避されて、生成されたソース ファイルと共にユーザー ファイルがインデントされないようになります。旧リリースでは、パターン model
_*.c/.cpp
(ここで *
はテキスト) の名前をもつフォルダー ファイルをビルドするために自動インデントが行われていました。インデントは無害ですが、ソース管理ソフトウェアによって違いが検出されることがあり、そのために不必要な更新がトリガーされる可能性があります。
S-Function のビルド サポート
ユーザーが記述する S-Function ブロックには、外部コードを Simulink® 開発環境に組み込むための強力な方法が用意されています。多くの場合、S-Function を使用して既存の外部コードを生成コードに統合します。以下のように、S-Function の記述に使用できる方法がいくつかあります。
古い形式のコード ファイルやカスタム コード ファイルのビルド情報をビルド プロセスに含めるために、S-Function にも柔軟で機能的な方法が用意されています。
S-Functions をビルド プロセスに追加するさまざまな方法があります。
暗黙的なビルド サポート
S-Function を使用してモデルをビルドする場合、ビルド プロセスによって、規則、インクルード パスおよびソース ファイル名が生成済みの makefile に追加されます。S-Function のソース ファイル (.h
、.c
および .cpp
) を S-Function MEX ファイルと同じフォルダーに配置しなければなりません。ビルドにツールチェーン アプローチを使用しているかテンプレート makefile アプローチを使用しているかにかかわらず、ビルド プロセスではツールチェーンまたはテンプレート makefile を介してこの情報が伝播されます。
ファイル
が S-Function MEX ファイル (sfcnname
.h
など) と同じフォルダーに存在する場合、そのフォルダーはインクルード パスに追加されます。sfcnname
.mexext
ファイル
またはsfcnname
.c
が S-Function MEX ファイルと同じフォルダーに存在する場合、ビルド プロセスはそのフォルダーからファイルをコンパイルするための makefile 規則を追加します。sfcnname
.cppS-Function が TLC ファイルでインライン化されていないと、ビルド プロセスはその S-Function のソース ファイルをコンパイルしなければなりません。ソース ファイルの名前をコンパイルするファイルのリストに追加するかどうかを決定するために、ビルド プロセスは MATLAB パスで
を検索します。ソース ファイルを見つけると、ビルド プロセスはそのソース ファイル名を makefile に追加します。パスでsfcnname
.cpp
が見つからないと、ビルド プロセスはファイル名sfcnname
.cpp
が MATLAB パス上にあるかどうかにかかわらず、この名前を makefile に追加します。sfcnname
.cメモ
Simulink エンジンでシミュレーションやコード生成のための MEX ファイルを見つけるには、ファイルが MATLAB パス上か、現在の MATLAB 作業フォルダー内になければなりません。
S-Function の追加ソース ファイルの指定
S-Function に追加のソース ファイルの依存関係がある場合は、追加モジュールの名前をビルド プロセスに追加しなければなりません。次のようにファイル名を指定します。
S-Function ブロック パラメーター ダイアログ ボックスの [S-Function モジュール] フィールドで指定
関数
set_param
の呼び出しのSFunctionModules
パラメーターを使用して指定
たとえば、複数のモジュールで S-Function をビルドするとします。
mex sfun_main.c sfun_module1.c sfun_module2.c
次のいずれかを実行すると、モジュールをビルド プロセスに追加できます。
S-Function ブロック パラメーター ダイアログ ボックスの [S-Function モジュール] フィールドで
sfun_main
、sfun_module1
およびsfun_module2
を指定します。MATLAB コマンド プロンプトで、次のように入力します。
set_param(sfun_block,'SFunctionModules','sfun_module1 sfun_module2')
または、変数を定義してパラメーター値を表すことができます。
modules = 'sfun_module1 sfun_module2' set_param(sfun_block,'SFunctionModules', modules)
[S-Function モジュール] フィールドと SFunctionModules
パラメーターは、完全なソース ファイル パスの仕様をサポートしません。パラメーターを使用するには、makefile の実行時にコード ジェネレーターが追加ソース ファイルを検出しなければなりません。コード ジェネレーターが追加ファイルの場所を特定するように、そのファイルを S-Function MEX ファイルと同じフォルダーに配置します。これで、暗黙的なビルド サポートに記載されている暗黙的なビルド サポートを活用できます。
コードを生成する準備ができたら、最上位モデル コードの再生成の制御の説明にあるように、コード ジェネレーターで最上位モデルを強制的にリビルドします。
他の場所にあるソース ファイルの指定やライブラリまたはオブジェクト ファイルの指定など、複雑な S-Function ファイルの依存関係では、生成された makefile を rtwmakecfg.m API を使用してカスタマイズで説明されているように rtwmakecfg.m
API を使用します。
TLC ライブラリ関数の使用
TLC ファイルを記述して S-Function をインライン化する場合、TLC ライブラリ関数 LibAddToModelSources
を使用してソース ファイル名をビルド プロセスに追加できます。詳細については、LibAddSourceFileCustomSection(file, builtInSection, newSection)を参照してください。
メモ
この関数は完全なソース ファイル パスの指定をサポートしません。makefile の実行時にコード ジェネレーターが追加のソース ファイルを検出できるものとみなします。
その他に、LibAddToCommonIncludes
という TLC ライブラリ関数が役立ちます。この関数は、生成された model
.h
ヘッダー ファイルに S-Function ヘッダー ファイルを含めるために、#include
ステートメントで使用します。詳細については、LibAddToCommonIncludes(incFileName)を参照してください。
他の場所にあるソース ファイルの指定やライブラリまたはオブジェクト ファイルの指定など、複雑な S-Function ファイルの依存関係では、生成された makefile を rtwmakecfg.m API を使用してカスタマイズで説明されているように rtwmakecfg.m
API を使用します。
S-Function ライブラリのプリコンパイル
MATLAB 言語関数 rtw_precompile_libs
を使用することによって、モデルに適した新しいまたは更新した S-Function ライブラリ (MEX ファイル) をプリコンパイルできます。この関数は、指定されたモデルおよびライブラリ ビルド仕様を使用し、ライブラリを作成してプリコンパイル済みのライブラリ フォルダーにライブラリを配置します。
S-Function ライブラリをプリコンパイルすることによって、システム ビルドを最適化できます。プリコンパイル済みのライブラリが存在する場合、ビルド プロセスはその後のビルドからライブラリのコンパイルを省略できます。多数のライブラリを使用するモデルでは、ビルド プロセスでの時間短縮は大きな意味があります。
rtw_precompile_libs
を使用するには、次を行います。
システム プラットフォームに基づいたファイル タイプの拡張子など、ライブラリ ファイルの接尾辞を設定します。
プラットフォームのタイプを特定したら、
TargetLibSuffix
パラメーターを使用してそれに対応したライブラリ接尾辞を設定することを検討します。たとえば、GRT ターゲットの接尾辞を適用する場合、UNIX® プラットフォームの_std.a
および Windows® プラットフォームの_vcx64.lib
に接尾辞を設定できます。if isunix suffix = '_std.a'; else suffix = '_vcx64.lib'; end set_param(my_model,'TargetLibSuffix', suffix);
プリコンパイル済みのライブラリ接尾辞と拡張子に影響する要因はいくつかあります。以下の表に、接尾辞と拡張子の選択肢に影響するシステム ターゲット ファイル、コンパイラ ツールチェーン、その他のオプションの典型的な選択例を示します。詳細は、
matlab/rtw/c/grt
フォルダーまたはmatlab/rtw/c/ert
フォルダーでテンプレート makefile を確認してください。TMF ファイル COMPILER _TOOL_CHAIN 値 プリコンパイラ ライブラリ (PRECOMP_LIBRARIES) S-Function のライブラリ接尾辞 (EXPAND _LIBRARY _NAME 値) 整数のみのコードのライブラリ接尾辞 (EXPAND _LIBRARY _NAME 値) 速度を最適化するライブラリ接尾辞 (EXPAND _LIBRARY _NAME 値) ライブラリ拡張子 (EXPAND _LIBRARY _NAME 値) ert_vcx64.tmf vcx64 _rtwsfcn_vcx64 _int_ert_vcx64 _ert_vcx64 .lib ert_unix.tmf unix _rtwsfcn _int_ert _ert .a grt_vcx64.tmf vcx64 N/A N/A _vcx64 .lib grt_unix.tmf unix N/A N/A _std .a プリコンパイル済みのライブラリ フォルダーを設定します。
次のメソッドのいずれかを使用して、プリコンパイル済みのライブラリ フォルダーを設定します。
プリコンパイル済みのライブラリの位置を指定で説明されている
TargetPreCompLibLocation
パラメーターを設定します。rtwmakecfg.m
関数ファイルでmakeInfo.precompile
フィールドを設定します (詳細については、生成された makefile を rtwmakecfg.m API を使用してカスタマイズを参照してください)。
TargetPreCompLibLocation
とmakeInfo.precompile
の両方を設定する場合は、TargetPreCompLibLocation
の設定内容が優先されます。次のコマンドは、モデル
my_model
のプリコンパイル済みライブラリ フォルダーを、現在の作業フォルダーの下にあるフォルダーlib
に設定します。set_param(my_model,'TargetPreCompLibLocation', fullfile(pwd,'lib'));
メモ
プリコンパイル済みライブラリ ファイルのターゲット フォルダーとターゲット ライブラリ ファイルの接尾辞の両方を設定する場合、ビルド プロセスは、ビルド処理中にプリコンパイル済みライブラリ ファイルが失われているかどうかを検出します。
ビルド仕様を定義します。
ビルド仕様を定義する構造体を設定します。次の表では、構造体で定義できるフィールドを説明します。これらのフィールドは
rtwmakecfgDirs
を除き、オプションです。フィールド 説明 rtwmakecfgDirs
プリコンパイルするライブラリの
rtwmakecfg
ファイルを含んでいるフォルダーに名前を付ける文字ベクトルの cell 配列。この関数はrtwmakecfg
が返すのと同様に、makeInfo.library
のName
要素とLocation
要素を使用して、プリコンパイル済みライブラリの名前と位置を指定します。TargetPreCompLibLocation
パラメーターをライブラリ フォルダーを指定するように設定すると、その設定はmakeInfo.library.Location
の設定をオーバーライドします。メモ: 指定したモデルは、
rtwmakecfg
ファイルで指定されるプリコンパイル済みライブラリを使用するブロックを含んでいなければなりません。これは、ビルド プロセスでライブラリを使用する場合に限って、TMF から makefile への変換でライブラリの規則が生成されるからです。libSuffix
各ライブラリの名前 ( .a
、_vc.lib
など) に追加する、ファイル タイプの拡張子を含むサフィックスを指定する文字ベクトル。文字ベクトルはピリオド (.) を含まなければなりません。このフィールドかTargetLibSuffix
パラメーターを使用してサフィックスを設定します。両方の方法で接尾辞を指定した場合はこのフィールドの設定内容がTargetLibSuffix
の設定によってオーバーライドされます。intOnlyBuild
boolean フラグ。true に設定すると、フラグは、ライブラリが整数コードからしかコンパイルされないようにライブラリが最適化されることを示します。このフィールドは ERT ターゲットにのみ適用されます。 makeOpts
rtwMake
コマンド ラインに含まれるオプションを指定する文字ベクトル。addLibs
関数
rtwmakecfg
で指定されない作成対象のライブラリを指定する構造体の cell 配列。各構造体は、文字配列である 2 つのフィールドで定義されなければなりません。libName
— サフィックスのないライブラリ名libLoc
— プリコンパイル済みライブラリの位置
ターゲット makefile (TMF) では、他のライブラリと、ライブラリのビルド方法を指定できます。このフィールドを使用して、それらのライブラリをプリコンパイルします。
次のコマンドはビルド仕様
build_spec
を設定します。これによって、コンパイル対象のファイルが現在の作業フォルダーの下にあるフォルダーsrc
内に存在することが示されます。build_spec = []; build_spec.rtwmakecfgDirs = {fullfile(pwd,'src')};
rtw_precompile_libs
を呼び出します。この呼び出しでは、プリコンパイル済みのライブラリとビルド仕様を作成するモデルを指定しなければなりません。次に例を示します。
rtw_precompile_libs(my_model,build_spec);