我在一个非常简单的模型中有一个C-MEX S-Function。 S-Function做了很多工作(它作为一种设备驱动程序来从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
答案 0 :(得分:1)
从模型生成代码时,它适用于模型的特定配置。虽然模型可以使用许多不同的配置运行,但生成的代码将具有集成到代码中的每个块的大小,类型,速率和复杂性。因此,要生成此代码,Simulink需要传播模型中的类型,以识别生成代码所需的所有输入和输出规范。运行您的S-Function代码来确定这一点。调用的函数应与常规模型运行相同,但不运行输出计算部分。
以下文档页面显示了在S-Function的代码生成中调用的内容。 http://www.mathworks.com/help/simulink/sfg/how-the-simulink-engine-interacts-with-c-s-functions.html