Legacy Code Tool を使用すると、Simulinkモデル上で使用できる既存のCコードを取り込んだ S-Function ブロックを生成できます。
また、Embedded Coder (Real-Time Workshop )によるコード生成に必要な TLC(Target Language Compilar) ファイルも自動生成できます。TLCファイルの存在により、C-MEX S-functionを使用するのに必要なラッパーコードがコード生成時に除外され、実行効率のよい組み込み向けCコードを生成できます。
今回は、入力値を3倍にして出力するCコードを取り込んでC-MEX S-FunctionとTLCファイルを生成する例を示します。
s = legacy_code('initialize');
s.SFunctionName = 'timesThree';
s.OutputFcnSpec = 'int32 y1 = timesThree(int32 u1)';
s.HeaderFiles = {'legacy_timesThree.h'};
s.SourceFiles = {'legacy_timesThree.c'};
legacy_code('sfcn_cmex_generate', s);
legacy_code('compile', s);
legacy_code('sfcn_tlc_generate', s);
legacy_code('slblock_generate', s);
以上の手順でC-MEX S-functionブロック用のMEX関数とMEX関数を指定したs-functionブロック、およびTLCファイルが生成されます。
サンプルモデルにはすでにs-functionブロックが配置されており、timesThreeという名前のMEX関数が指定されているので、この状態でサンプルモデルが実行可能となります。
さらに、サンプルモデル内に配置されているサブシステムをビルドして、改めてC-MEX s-functionを含むサブシステムからCコードを生成すると、legacy_timesTree.c中の関数(timesThree)を呼び出すCコードが生成されます。
※サブシステムのビルドには、MATLAB Coder、Simulink CoderとEmbedded Coderのライセンスが必要です。
回答欄上部から、以下の3つのサンプルプログラム、サンプルモデルをダウンロードできます。サンプルモデルはR2006b以降のバージョンで使用可能です。
legacy_timesThree.c
legacy_timesThree.h
timesThree_test.mdl
本件に関するヘルプドキュメントは、以下 からご参照頂けます。