C-MEX S-Functionパラメータにワークスペースの配列を渡す方法について
8 views (last 30 days)
Show older comments
https://jp.mathworks.com/matlabcentral/answers/92454-c-mex-s-function#answer_101805
S-Functionパラメータに配列を渡す方法として上記のQAを参照させていただきましたが、
私の環境ではmxGetPr()で取得できるp[0]ポインタがp[3]の位置を表してしまいp[3]以外のデータにアクセスすることができません。
私が試した環境は以下の通りです。 MATLAB R2013b
・ワークスペースに作成した配列の要素の型:double
・配列の要素は整数のみ設定(3×4の配列に1~12などを設定)
・配列のサイズを変えてもmxGetPr()で取得できるのは必ず最後の要素のポインタ
また、調査のためssGetSFcnParamで取得したMATLAB配列を引数に以下の関数を実施した結果は以下の通りです
mxGetNumberOfDimensions → 2
mxGetDimensions → 1
mxGetNumberOfElements → 1
mxGetM → 1
mxGetN → 1
配列の最後の要素が取得されてしまう原因として考えられることがありましたらご回答いただきますようお願い致します。
0 Comments
Accepted Answer
Akihiro Yasuda
on 20 Oct 2016
answer_101805にあるとおり、ssGetSFcnParamでmxArrayのポインタを取得し、mxGetPrの引数に渡せば、パラメーターへのポインタにアクセスできます。
添付ファイルは、デモモデルsfcndemo_timestwoを 2x2次元のパラメーターに変更しています。
(timestwo.cからmytimes.cへの主な変更点)
23行目:#define TIMES(S) ssGetSFcnParam(S, 0)
80行目:double *times = mxGetPr(TIMES(S));
88行目:*y++ = times[i] *(*uPtrs[i]);
なお、C-MEX S-Functionを独自に作成する場合、
まずはsfundemosから、参考になるデモモデルとソースコードを確認した後、
簡易なモデルを作成し、順次、所望の形へ近づける事をお勧めします。
[関連資料]
More Answers (0)
See Also
Categories
Find more on General Applications in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!