我用C編寫了一個Simulink S函數(Level 2)。結果塊有一個輸出和一個參數。該參數存儲在一個變量,它在文件範圍定義,建立塊後右:Simulink:如何在2級s函數中使用局部變量?
#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
}
我怎樣才能得到一個真正的「局部變量」,這樣我就不必每次重複這一切?
這正是[Work Vectors](http://www.mathworks.com/help/simulink/state-and-work-vector.html)的用途。 –