主要内容

このペジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

構造体引数をもレガシ関数によるバスの使用

この例は,金宝app仿真软件®バスを使用した構造体の引数が含まれるレガシC関数を,レガシコードツールによって統合する方法を示します。

レガシコドルを使用すると,以下のことができます。

  • レガシ関数の仕様を提供する。

  • レガシコードを呼び出すためにシミュレーション時に使用されるC-MEX s函数を生成する。

  • 生成されたs -命令功能をシミュレ。

レガシ関数の仕様を提供

レガシコドルに含まれる関数は,特定のデタ構造体または構造体配列を引数として使用します。このデータ構造体は,最初の入力として初始化を使用する関数legacy_code()を呼び出すことで初期化されます。構造体の初期化後,統合されるレガシコードに対応する値に,構造体のプロパティを割り当てる必要があります。この例で呼び出されるレガシ関数のプロトタ邮箱プは以下のとおりです。

counterbusFcn(COUNTERBUS *u1, int32_T u2, COUNTERBUS *y1, int32_T *y2)

ここで反总线は,counterbus.hで定義されているstruct typedefであり,ベースワークスペース内で仿真软件金宝app。公交车オブジェクトによって実装されます。レガシソスコドは,ファルcounterbus.hcounterbus.cにあります。モデルとファイルを開くには、[モデルを開く]をクリックします。

evalin (“基地”“负载sldemo_lct_data.mat”% sldemo_sfun_counterbusDef = legacy_code(“初始化”);def.SFunctionName =“sldemo_sfun_counterbus”;def.OutputFcnSpec ='void counterbusFcn(COUNTERBUS u1[1], int32 u2, COUNTERBUS y1[1], int32 y2[1])';def.HeaderFiles = {“counterbus.h”};def.SourceFiles = {“counterbus.c”};def.IncPaths = {“sldemo_lct_src”};def.SrcPaths = {“sldemo_lct_src”};

シミュレション時に使用されるs -功能说明の生成とコンパ

入力引数defによって示される説明に従ってC-MEX s函数の生成とコンパイルを自動的に行うために,1番目の引数をgenerate_for_simに設定して関数legacy_code()が再び呼び出されます。このS-Functionは,シミュレションでレガシ関数を呼び出すときに使用されます。s -功能说明のソスコドは,ファルsldemo_sfun_counterbus.cにあります。

legacy_code (“generate_for_sim”def);
开始编译sldemo_sfun_counterbus mex('-I/tmp/Bdoc21b_1743843_148239/tpf860652d/ex39753963/sldemo_lct_src', '-I/tmp/Bdoc21b_1743843_148239/tpf860652d/ ex397543_148239 / tpf8481cf_1743843_148239 /tpfe7481cf_44c7_43a5_b5c2_2e754d3c8dc4', '/tmp/Bdoc21b_1743843_148239/tpf860652d/ex39753963/sldemo_lct_src/counterbus.c')使用'gcc'编译。MEX成功完成。mex('sldemo_sfun_counterbus.c', '-I/tmp/Bdoc21b_1743843_148239/tpf860652d/ex39753963/sldemo_lct_src', '-I/tmp/Bdoc21b_1743843_148239/tpf860652d/ex39753963', '/tmp/Bdoc21b_1743843_148239/tpfe7481cf_44c7_43a5_b5c2_2e754d3c8dc4/counterbus.o')使用'gcc'构建。MEX成功完成。###完成编译sldemo_sfun_counterbus ###退出

コド生成用のrtwmakecfg. txtMファルの生成

TLCブロックファイルの作成後に,最初の入力をrtwmakecfg_generateに設定することで関数legacy_code()を再び呼び出します。これは,金宝appSimulink®Coder™を介したコ,ド生成をサポ,トするrtwmakecfg。Mファルを生成するためです。s函数に必要なソースファイルとヘッダーファイルがs函数と同じディレクトリにない場合に,コード生成時に作成されるmakefile内にこれらの依存関係を追加するとき,rtwmakecfg。Mファルを生成します。

メモ:モデルのシミュレーションをアクセラレータモードで実行する場合にのみ,この手順を実行します。

legacy_code (“rtwmakecfg_generate”def);

生成されたs函数を呼び出すためのマスクされたs函数ブロックの生成

C-MEX s函数ソースのコンパイルが終了したら,最初の入力をslblock_generateに設定して関数legacy_code()を再び呼び出すことができます。これは,s函数を呼び出すように設定されたマスク済みのs函数ブロックを生成するためです。このブロックは新しいモデルに配置されますが,既存のモデルにコピすることもできます。

% legacy_code('slblock_generate', def);

レガシコドの統合

モデルsldemo_lct_busは,レガシコドとの統合を示しています。サブシステムTestCounterは,レガシC関数の呼び出しに利用できます。

open_system (“sldemo_lct_bus”) open_system (“sldemo_lct_bus / TestCounter”) open_system (“sldemo_lct_bus / ScopeA”) open_system (“sldemo_lct_bus / ScopeA1”) sim卡(“sldemo_lct_bus”
ans = 金宝appSimulink。SimulationOutput: ScopeDataA: [301x4 double] ScopeDataA1: [301x4 double] tout: [301x1 double] SimulationMetadata: [1x1 金宝appSimulink. txt]SimulationMetadata] ErrorMessage: [0x0 char]

参考