C で Simulink S-Function (レベル 2) を作成しました。結果のブロックには、1 つの出力と 1 つのパラメーターがあります。このパラメーターは、ブロックをセットアップした直後に、ファイル スコープで定義される変数に格納されます。
#define NUM_PARAMS 1
#define NUM_INPORTS 0
#define NUM_OUTPORTS 1
unsigned short int MASK_INDEX;
mdlInitializeSizes 内で割り当て、その値に対していくつかの操作を行います。
static void mdlInitializeSizes(SimStruct *S) {
// Check Parameters
ssSetNumSFcnParams(S, NUM_PARAMS);
if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) {
return;
}
MASK_INDEX = *mxGetPr(ssGetSFcnParam(S, 0));
(...) operations
}
私の問題は、変数 MASK_INDEX がグローバルで、同じタイプのすべてのブロック間で共有されているように見えることです。したがって、すべてのブロックで同じ値を保持します。
回避策として、毎回リロードして操作をやり直します。次に例を示します。
static void mdlOutputs(SimStruct *S, int_T tid) {
MASK_INDEX = *mxGetPr(ssGetSFcnParam(S, 0));
(...) operations
}
毎回これをすべて繰り返す必要がないように、真の「ローカル変数」を取得するにはどうすればよいですか?