C-MEX S-Functionパラメータにワークスペースの配列を渡す方法について
6 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
Akihiro Yasuda
2016 年 10 月 20 日
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から、参考になるデモモデルとソースコードを確認した後、
簡易なモデルを作成し、順次、所望の形へ近づける事をお勧めします。
[関連資料]
その他の回答 (0 件)
参考
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!