我用 C 语言编写了一个 Simulink S-Function(级别 2)。生成的模块有一个输出和一个参数。此参数存储在一个变量中,该变量在设置块之后立即在文件范围内定义:
#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
}
我怎样才能得到一个真正的“局部变量”,这样我就不必每次都重复这一切?