このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
完全インライン化 S-Function の記述
完全インライン化 S-Function では、アルゴリズム (ブロック) は生成コードにビルドされて組み込みブロックと見分けがつかなくなります。通常、完全インライン化 S-Function では 2 回のアルゴリズム実装が必要です。1 回は Simulink モデル (C/C++ MEX S-Function) に対して、もう 1 回はコード生成 (TLC ファイル) に対して行います。
ラッパー S-Function および TLC ファイルの記述の例を使用する場合、wrapsfcn.tlc
で明示的なコード (つまり、2.0 * u
) を指定することによって関数 my_alg
への呼び出しを完全に削除できます。これによって性能は向上しますが、大量の C/C++ コードで実行すると、タスクが長時間になる可能性があります。また、C/C++ S-Function そのものと対応する TLC ファイルの 2 か所でアルゴリズムを保持しなければなりません。パフォーマンスの向上がその欠点を補って余りあるかどうか検討します。この例で使用するアルゴリズムをインライン化するには、wrapsfcn.tlc
ファイルの Outputs
セクションで次を記述する代わりに
%<y> = my_alg(%<u>);
次を使用します。
%<y> = 2.0 * %<u>;
このコードは、mdlOutputs
で生成されるコードです。
void mdlOutputs(int_T tid) { /* Sin Block: <Root>/Sin */ rtB.Sin = rtP.Sin.Amplitude * sin(rtP.Sin.Frequency * ssGetT(rtS) + rtP.Sin.Phase); /* S-Function Block: <Root>/S-Function */ rtB.S_Function = 2.0 * rtB.Sin; /* Explicit embedding of algorithm */ /* Outport Block: <Root>/Out */ rtY.Out = rtB.S_Function; }
Target Language Compiler は my_alg
の呼び出しをアルゴリズムそのものと置き換えます。
マルチ端子 S-Function
より詳細なマルチ端子 S-Function の例は、sfun_multiport.c
と sfun_multiport.tlc
です。この S-Function では、複数の端子を含んでいる S-Function について完全にインライン化された TLC ファイルを作成する方法を説明します。
インライン化 S-Function の記述に関するガイドライン
ブロック プロパティ
RTWdata
を使用するとします (S-Function RTWdataを参照)。このプロパティは、ブロックとの関連付けが可能な文字ベクトルの構造体です。コード ジェネレーターは、
ファイルのモデルでこの構造体を保存し、model
.rtw.rtw
ファイルを読みやすくします。たとえば、MATLAB コマンド ウィンドウで次のコマンドを入力するとします。mydata.field1 = 'information for field1'; mydata.field2 = 'information for field2'; set_param(sfun_block, 'RTWdata', mydata);
コード ジェネレーターがブロックに対して生成する
.rtw
ファイルには、構造体mydata
に指定したコメントが含まれます。関数
mdlRTW
を使用して、以下の目的で生成コードで C MEX S-Function をインライン化することを検討します。生成コード内の調整可能なパラメーターの名前を変更する。
調整不可能なパラメーターを TLC ファイルに導入する。