Real-Time Workshop User's Guide | ![]() ![]() |
チュートリアル: カスタムターゲット構成の作成
このチュートリアルは、ラピッドプロトタイピングターゲットの骨格を作成する作業を行います。この例題は、以下のようなカスタムターゲットの作成時に通常必要な作業を説明します。
実世界のアプリケーションでは、インラインまたは非インラインデバイスドライバS-Functionをモデルおよび生成されたコードに組み込みます。このチュートリアルでは、入力を2倍する簡単なS-Functionをインライン化します。
このプロセスは、ユーザ独自のプロジェクトの出発点として利用することができます。
この例題では、WindowsのLCCコンパイラを使います。LCC
は、Real-Time Workshopに付属しています。別のコンパイラを使う場合は、MATLABコマンドプロンプトでつぎのようにタイプして、デフォルトコンパイラとしてLCCを一時的に設定することが可能です。
mex -setup
コマンドプロンプトウィンドウがオープンします。プロンプトに従い、LCCを選択します。
この例題では、コードは、非常に簡単な固定ステップモデルtargetModel.mdl
(図 17-1を参照))から生成されます。結果のプログラムは、一般のリアルタイムターゲットに対してビルドされたものと全く同様に振る舞います。
S-Functionブロックは、timestwo
の例題のソースコードを利用します。このS-Functionの詳しい説明は、Writing S-Functionsマニュアルを参照してください。Target Language Compiler Reference Guideでは、timestwo
のインライン版timestwo.tlc
を説明しています。
.tlc
および.tmf
ファイルを格納するディレクトリを作成します。このディレクトリをd:\work\mytarget
とします。
d:\work\mytarget
をMATLABパスに追加します。
addpath d:\work\mytarget
d:\work\mytarget
を作業ディレクトリにします。Real-Time Workshopは、コード生成プロセスの出力ファイルを作業ディレクトリ内のビルドディレクトリに書き出します。
timestwo
S-functionのCソースコードmatlabroot
\toolbox\rtw\rtwdemos\tlctutorial\timestwo\solutions\timestwo.c
をd:\work\mytarget
にコピーします。
d:\work\mytarget
のtimestwo
MEX-ファイルをビルドします。mex timestwo.c
fixed-step
とode4
に設定します。
timestwo
を入力します。ブロックは、timestwo
MEX-ファイルになっています。OKをクリックします。
timestwo
S-function が入力に2.0を乗算することを確認します。
timestwo
S-Functionブロックからインラインコードを生成するためには、作業ディレクトリに対応するTLCファイルがなければなりません。Target Language Compilerが作業ディレクトリ内で同名のC-コードのS-FunctionとTLCファイルを検出した場合、TLCファイルからインラインコードを生成します。そうでない場合は、外部のS-Functionのファンクションコールを生成します。
ビルドプロセスがtimestwo
ブロックからインラインコードを生成したことを確認するため、matlabroot
\toolbox\rtw\ rtwdemos\tlctutorial\timestwo\solutions\timestwo.tlc
からtimestwo
TLCソースコードを
d:\work\mytarget
にコピーします。
matlabroot
\rtw\c\grt
には、一般のリアルタイムターゲット用のメインプログラム (grt_main.c
)とシステムターゲットファイル(grt.tlc
)が含まれます。grt_main.c
とgrt.tlc
をd:\work\mytarget
にコピーします。それらの名前をmytarget_main.c
とmytarget.tlc
に変更します。
mytarget.tlc
の最初のコメント行を削除します。削除する行は以下の通りです。%% SYSTLC: Generic Real-Time Target \ %% TMF: grt_default_tmf MAKE: make_rtw EXTMODE: ext_comm %% SYSTLC: Visual C/C++ Project Makefile only for the "grt" target \ %% TMF: grt_msvc.tmf MAKE: make_rtw EXTMODE: ext_comm
最初のコメント行は、my_target
をSystem Target File Browserに加えたい場合にのみ意味があります。現時点ではこれらを削除します。
rtwgensettings
構造体で指定されます。サフィックスをより適切な文字列にするには、つぎの行
rtwgensettings.BuildDirSuffix = '_grt_rtw'
を
rtwgensettings.BuildDirSuffix = '_mytarget_rtw'
に変更します。ビルドディレクトリ名は、targetModel__mytarget_rtw
になります。
matlabroot
\rtw\c\grt
には、一般のリアルタイムターゲットに対するコンパイラ固有のテンプレートmakeファイルが含まれます。LCCコンパイラに対して適切なテンプレートmakeファイルは、grt_lcc.tmf
です。grt_lcc.tmf
をd:\work\mytarget
にコピーし、名前をmytarget.tmf
に変更します。
注意
つぎのステップに記述されているテンプレートmakeファイルの変更の中には、LCCテンプレートmakeファイルに固有のものがあります。他のコンパイラおよびテンプレートmakeファイルを使っている場合は、ソース(REQ_SRCS) およびオブジェクトファイル(%.obj :) に対する規則の一覧は、わずかに異なります。
|
mytarget.tmf
を変更します。SYS_TARGET FILE
パラメータは、正しいファイルの参照がmakeファイル内で生成されるように変更する必要がああります。つぎの行
SYS_TARGET FILE = grt.tlc
を
SYS_TARGET FILE = mytarget.tlc
に変更します。また、grt_main.c
の代わりにmytarget_main.c
をインクルードするようにsource file
リストを変更します。
REQ_SRCS = $(MODEL).c $(MODULES) mytarget_main.c...
最後に、つぎの行
%.obj : $(MATLAB_ROOT)/rtw/c/grt/%.c
を
%.obj : d:/work/mytarget/%.c
mytarget_main.c
への変更は必要ありません。実際のアプリケーションでは、mytarget_main.c
を変更してタイマ割り込みのコントロールのもとでモデルコードを実行したり、他の変更を行います。
### Created executable: targetModel.exe
### Successful completion of Real-Time Workshop build procedure for model: targetModel
作業ディレクトリは、targetModel.exe
ファイルとビルドディレクトリtargetModel_mytarget_rtw
を含みます。
d:\work\mytarget\targetModel_mytarget_rtw\targetModel.c
をエディットし、MdlOutputs
関数の位置を決めます。インラインコードを見てみます。
/* S-Function Block: <Root>/S-Function (timestwo) */ rtB.S_Function = 2.0 * rtB.Sine_Wave;
作業ディレクトリは、TLCファイル(timestwo.tlc)
をtimestwo
S-Functionブロックと同じ名前で含んでいるため、Target Language Compilerは外部のC-コードS-Functionではなくインラインコードを生成しました。
![]() | 制御ファイル | ビルドプロセスのカスタマイズ | ![]() |