2016-11-02 11 views
0

simulinkモデルで複数のインスタンスを持つs-functionをインライン化する必要があります。 S-functionでは、dllファイルをロードする必要がありますが、s-functionの1つのインスタンスでのみ実行する必要があります。私は次のようにTLCを書いた: ..... %ファンクションスタート(ブロック、システム)出力複数のインスタンスを持つs-functionのMATLABコード

dll_handle = LoadLibraryA( "MYDLL"); dll_setup =(DLL_SETUP)GetProcAddress(dll_handle、 "setup"); .....

コード生成後、これらのStart関数行は、s-functionのすべてのインスタンスのソースコードに追加されました。しかし、私は一度dllをロードする必要があります。それらの行をs-functionの最初のインスタンスに対してのみ追加することは可能ですか?

注:TLCのドキュメントでは、モデルにs-functionのインスタンスが複数ある場合、インライン展開を避けることがわかっています。

答えて

0

最も簡単なことは、これらの行を外部ファイルに置き、静的変数を使用してワンタイム初期化を追跡することです。その後、Start関数からその関数への呼び出しを追加します。 tlcからその外部ファイルを生成する場合は、BlockTypeSetup TLC関数を探し、LibAddToModelSourcesを使用してソースファイルを生成されたコードに追加します。

0

これは、いくつかのかすんメモリからですが、私はあなたがグローバルなどを使用することができると思う:

%assign ::DLL_LOADED = 0 

%function Start() 

%if :: DLL_LOADED == 0 
    %% load DLL here 
    %assign ::DLL_LOADED = 1 
%endif 

私はそのようなことがうまくいくと思います。

関連する問題