C-MEX S-Function の中では、グローバル変数、スタティック変数は使えますか。
3 ビュー (過去 30 日間)
古いコメントを表示
MathWorks Support Team
2013 年 10 月 25 日
回答済み: MathWorks Support Team
2013 年 10 月 25 日
C-MEX S-Function の中では、グローバル変数、スタティック変数は使えますか。
採用された回答
MathWorks Support Team
2013 年 10 月 25 日
技術的には可能ですが、推奨していません。
グローバル変数、スタティック変数を使用すると、同じ S-Function ブロックを、同一の Simulink モデル内で複数個使用した場合などで、変数領域のコンフリクトによる原因で不具合が発生する可能性があるためです。
C-MEX S-Function では、この問題を回避するために、ワークベクトルというデータ保存領域が提供されています。
ワークベクトルには実数データ用、整数データ用、ポインタ格納用の3種類が用意されており、扱うデータの種類により使用するSimStructマクロ(ss関数)が異なります。
ワークベクトルに関する、代表的なSimStructマクロには、以下のようなものがあります。
(1)保持するデータの要素数の設定
実数ワークベクトル:ssSetNumRWork
整数ワークベクトル:ssSetNumIWork
ポインタワークベクトル:ssSetNumPWork
(2)データの取得
実数データを格納する場合:ssGetRWork
整数データを格納する場合:ssGetIWork
ポインタを格納する場合:ssGetPWork
また、下記の関連ドキュメントある例題は、実数ワークベクトル、ポインタワークベクトルを使用するS-Functionのソースプログラムの例です。
<各時間ステップ毎に、入力値に実数ワークベクトルに格納された値を加算して出力値とし、出力値を実数ワークベクトルに格納するサンプルプログラム>
rworktest.mdl
rworkfun.c
<mxArray構造体としてポインタワークベクトルに格納された2つのスカラー値a, bに対し、各時間ステップ毎に、出力値を入力値の(a+b)倍とし、a, bの値をそれぞれインクリメントするサンプルプログラム>
pworktest.mdl
pworkfun.c
0 件のコメント
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!