0

我的 CMEX S-Function 有一个输入端口,我将其设置为没有直接馈通。但是,当我尝试在mdlUpdate函数调用中使用来自输入端口的信号时,它会因分段违规而崩溃,并通知我最可能的原因是输入端口的直接馈通状态设置不正确。

在 mdlUpdate 中使用输入信号是否也算作直接馈通?

4

1 回答 1

0

对于那些将来可能会研究这个问题的人,我找到了答案。mdlUpdate不算作直接馈通。但是,如果您尝试在第一个时间步访问输入端口信号,则会导致分段冲突(Mathworks 文档表明该错误可能因不同计算机而异)。

诀窍是用来ssIsFirstInitCond(S)获取编译器是否在第一步,并避免在第一步中进行任何赋值。

我的代码如下所示:

#define MDL_UPDATE
#if defined(MDL_UPDATE)
static void mdlUpdate(SimStruct *S)
{UNUSED_ARG(tid);
  if(!ssIsFirstInitCond(S))
  {
    real_T *u1 = (real_T *) ssGetInputPortSignal(S)[0];
    double *P1 = (double *) ssGetPWork(S)[0];
    // assign values here
  }
}
#endif

另外,请注意mdlUpdate仅在主要时间步骤中调用

于 2014-08-22T14:24:43.410 回答