【发布时间】:2023-03-14 02:45:01
【问题描述】:
#define S_FUNCTION_NAME myfunction_sFun
#define S_FUNCTION_LEVEL 2
#define MDL_INITIAL_SIZES
#define MDL_INITIALIZE_SAMPLE_TIMES
#include "tmwtypes.h"
#include "simstruc_types.h"
#include "mex.h"
#include "simstruc.h"
void mdlInitializeSizes(SimStruct *S)
{
ssPrintf("Initialize\n");
//My code has been removed from here
ssPrintf("End Initialize\n");
}
void mdlInitializeSampleTimes(SimStruct *S)
{
ssPrintf("Sample Times\n");
}
#define MDL_OUTPUTS
#ifdef MDL_OUTPUTS
void mdlOutputs(SimStruct *S, int_T tid)
{
ssPrintf("Outputs\n");
}
#endif
#define MDL_START
#ifdef MDL_START
void mdlStart(SimStruct *S)
{
ssPrintf("Start\n");
}
#endif
void mdlTerminate(SimStruct *S){}
/==============================
-
所需的 S-function 预告片 *
==============================/
#ifdef MATLAB_MEX_FILE /* 这个文件是否被编译为 MEX 文件? */
#include "simulink.c" /* MEX 文件接口机制 */
#else
#include "cg_sfun.h" /* 代码生成注册函数 */
#endif
【问题讨论】:
-
当我运行我的 s-function(在 MATLAB 中或通过 simulink 图)时,我只看到“Initialize”和“End Initialize”输出。 s 函数从不执行其他 mdl* 函数。有谁知道为什么会这样?我还通过将 MATLAB 进程附加到 Visual Studio 并调试来验证了这一点 - 除了 mdlInitializeSizes 之外的每个函数中的断点都没有到达。
-
您的问题与代码格式有关。您的评论也应该是问题本身的一部分。
-
你尝试编译你的代码吗?在这种情况下,有时您应该查看 tlc 文件(如果存在的话)。可能有一些函数被遗漏了,因此它们不会被调用。
标签: matlab simulink s-function