1

SIMULINK モデルに、関数内でいくつかの静的変数を使用するレガシー C 関数があります。静的変数はグローバルに使用できます。モデルの複数のインスタンスを参照すると、S-Function がそのように構成されていないため、エラーが発生します。コード生成でこれが許可されていないため、このエラー メッセージが表示されます。

私が得るエラーメッセージは次のとおりです。

S-Function ブロック 'ECDCTRL/PULDESC/S-Function Builder' は、複数の実行インスタンスをサポートすることを宣言していないため、マルチインスタンス ノーマル モードではサポートされていません。S-Function が複数の実行インスタンスの要件を満たす場合、'mdlSetWorkWidths' メソッドで SimStruct 関数 'ssSupportsMultipleExecInstances' を使用してこれを宣言できます。

(MYSFUNC)_Outputs_Wrapper.c自動生成されたコードでビルドするときにファイルを使用しています。モデルの複数の参照を使用する場合に、レガシー C 関数を確実に使用できるようにするにはどうすればよいですか? SIMULINK の Web サイトではメソッドの使用が提案されていますが、ヘッダー ファイルssSupportsMultipleExecInstances(SimStruct *S, bool flag)を使用していないため正しくありません。SimStruct回避策は何ですか?

4

1 に答える 1

3

静的変数の代わりに DWork ベクトルを使用します。ここから引用:

DWork ベクトルにはいくつかの利点があります。

Provide instance-specific storage for block variables
Eliminate static and global variables
于 2013-12-09T13:12:51.923 に答える