2016-12-07 23 views
0

をキャッチするラッパーfunctioを書きます。私はこれに非常に新しいです、私といくつかの忍耐をしてください。MATLABは、ツールをLEGACY_CODE - 現在私はMatlabのLEGACY_CODEツールによって、MATLAB/SimulinkでのC/C++コードベースのライブラリを使用しようとしている配列

私は、配列を返すクラスメンバーを得たことを、問題につまずきました。

私は今、時にやったことは、特にこの1、Matlabのレガシー・コードの例に従うことです:

Integrate External C++ Object Methods

私の知る限り見ることができるように、LEGACY_CODEツールが周りにラップされるラッパー関数を要求メソッド呼び出しは基本的に可能なので、このラッパー関数内では、呼び出されるメタドの戻り値を必要に応じて操作します。これまでのところ問題ありません。

しかし、私は、MATLAB/Simulinkのには、この配列を渡すと呼ばれる方法からの情報の配列を受信する方法かどうか分かりません。

メソッドの戻り値は、保持している有効な情報の長さを知っている情報の配列を指すポインタです。

/* Simple example */ 

uint8_t* BUS::answerRcvd() 
{ 
    static int r[10]; 
    int i; 


    srand((unsigned)time(NULL)); 

    for (i = 0; i < 10; ++i) 
    { 
     r[i] = rand(); 
    } 

    return r; 
} 

情報の配列を受信し、MATLABために沿って、それを通過するような方法のためのラッパー関数を作成する方法はありますか?

は、例えば、そのようなアレイを処理する可能性があるかもしれませんuint8_tの単一の値(もし与えられた例にとどまっているなら)、これらを普通のmatlab関数のように渡しますか?

[a,b,c] = function() 

私はいかなる提案もありませんので、事前に大変ありがとうございます。

答えて

1

私の問題の解決策を見つけたようです。このラッパー関数ザは、次に以下のようにレガシコードツール(LCT)によりインターフェースされ

void myfunc(double u1, double u2, double u3, double *y1, double *y2) 
{ 
    *y1=u1; 
    *y2=(u2+u3)/2; 
} 

次のパターンを使用するその可能ラッパー関数として

:と

def = legacy_code('initialize') 
def.OutputFcnSpec = 'void myfunc(double u1, double u2, double u3, double y1[1], double y2[1])' 

シンプル。 C/C++コードでは、ポインタ命名法/構文を使用し、Matlabでは配列命名法/構文を使用します。私は願っています

、これはのみだけでなく、複数の入力が、複数の出力を受け入れるべきではないレガシーコードとインタフェースするソリューションを必要とする私のようないくつかの人々を助けるだろう。

後知恵ではポインタtuuseオプションはかなり明白ですが、それとのインターフェイスにどのようにあなたのLCTを教えるためにどのようknoeいない場合、それは簡単に疲れる作業になります。

+0

対応するMatlabドキュメントへのリンク: http://de.mathworks.com/help/simulink/sfg/integrating-existing-c-functions-into-simulink-models-with-the-legacy-code-tool .html – RaEyE

関連する問題