나는 Simulink S-function (Level 2)을 C로 작성했다. 결과 블록은 하나의 출력과 하나의 매개 변수를 갖는다. 내가 mdlInitializeSizes 내에서 할당Simulink : 레벨 2 s- 함수에서 로컬 변수를 사용하는 방법?
#define NUM_PARAMS 1
#define NUM_INPORTS 0
#define NUM_OUTPORTS 1
unsigned short int MASK_INDEX;
, 그 값에 대한 몇 가지 작업을 수행합니다 :이 매개 변수는 바로 블록을 설정 한 후, 파일 범위에서 정의 된 변수에 저장됩니다
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)가 있습니다. –