为什么 Simulink coder 在我生成代码时启动和停止我的 S 函数?

Why does Simulink coder start & stop my S function when I generate code?

我在一个非常简单的模型中有一个 C-MEX S-Function。 S-Function 做了很多(它充当一种设备驱动程序来获取数据 to/from Simulink 模型)。当我按下生成代码按钮时,我可以从诊断日志中看到该功能启动然后终止。请问这是为什么?

我有一个在 S-Function 的各个阶段调用的日志函数,以帮助我理解程序流程,正如您从构建日志中看到的那样(以 [INFO] 开头的 3 行):

### Generating code into build folder: /some_dir_path/output/test_grt_rtw
[INFO] mdlInitializeSizes
[INFO] mdlInitializeSampleTimes
[INFO] mdlTerminate
### Invoking Target Language Compiler on test.rtw
### Using System Target File: /Applications/MATLAB_R2015b.app/rtw/c/grt/grt.tlc
### Loading TLC function libraries
### Initial pass through model to cache user defined code
### Caching model source code
### Writing header file test.h
### Writing header file test_types.h
### Writing header file rtwtypes.h
.
### Writing header file multiword_types.h
### Writing source file test.cpp
### Writing header file test_private.h
### Writing header file rtmodel.h
### Writing source file test_data.cpp
### Writing header file rt_nonfinite.h
.
### Writing source file rt_nonfinite.cpp
### Writing header file rtGetInf.h
### Writing source file rtGetInf.cpp
### Writing header file rtGetNaN.h
### Writing source file rtGetNaN.cpp
### TLC code generation complete.
### Creating project marker file: rtw_proj.tmw
### Using toolchain: Clang v3.1 | gmake (64-bit Mac)
// remainder of log file here

当您从模型生成代码时,它是针对模型的特定配置。虽然模型可以 运行 具有许多不同的配置,但生成的代码会将每个块的大小、类型、速率和复杂性集成到代码中。因此,要生成此代码,Simulink 需要传播模型中的类型,以识别生成代码所需的所有输入和输出规范。您的 S-Function 代码是 运行 确定的。调用的函数应该与常规模型相同 运行 除了输出计算部分不是 运行.

以下文档页面显示了在 S-Function 的代码生成中调用的内容。 http://www.mathworks.com/help/simulink/sfg/how-the-simulink-engine-interacts-with-c-s-functions.html