使用提供的C MEX S函数模板之一作为创建自己的S函数的起点。模板包含具有解释其使用的评论的回调方法的骨架实现。模板文件,sfuntmpl_basic.c.
,包含常用的S函数例程。可以找到包含所有可用例程(以及更多评论)的模板sfuntmpl_doc.c.
在同一个文件夹中。
笔记
我们建议您在开发MEX S函数时使用C MEX文件模板。
本节介绍每个S函数源文件必须正确编译的要求。S函数模板符合这些要求。
对于S函数来运行正确,每个访问该函数的源模块酝酿
必须包含以下定义序列并包括
#define s_function_name.your_sfunction_name_he#define s_function_level 2 #include“simstruc.h”
在哪里your_sfunction_name_he
是您函数的名称(即,您在S函数块参数对话框中输入的内容)。这些陈述可以访问您的访问权限酝酿
数据结构包含指向模拟使用的数据的指针。附带的代码还定义了用于存储和检索数据的宏酝酿
,详细描述转换级-1 C MEX S函数。此外,代码指定您使用的是级别2 S函数格式。
笔记
Simulink的所有S函数万博1manbetx®版本1.3通过版本2.1被认为是级别1 S函数。它们与软件的较新版本兼容,但我们建议您在级别2格式中编写新的S函数。
以下标题包括在内simstruc.h.
当编译为MEX文件时。
SIMStruc.h包含的标题文件作为MEX文件编译
编译S-函数时使用万博1manbetxSimulink Coder™产品,simstruc.h.
包括以下内容。
SIMStruc.h包含的标题文件万博1manbetx编码器产品
标题文件 | 描述 |
---|---|
|
一般类型,例如,real_t. |
|
酝酿 数据类型,例如,dtypeid. |
|
Matlab API常规的宏 |
您的S函数必须实现以下功能(参见配置C / C ++ S功能功能):
指定各种参数的大小mdlinitializatize
酝酿
,例如块的输出端口数。
指定块的采样时间。mdlinitializateMpletimes
计算块的输出。mdloutputs.
在终止模拟时执行任何操作。如果不需要任何操作,则该函数可以作为存根实现。mdlterminate.
您的S函数必须仅包含主模块末尾的以下拖车代码。
#ifdef matlab_mex_file / *这是被编译为mex文件吗?* / #include“万博1manbetxsimulink.c”/ * mex文件界面机制* / #else #include“cg_sfun.h”/ *代码生成注册func * / #endif
这些语句为特定应用程序选择适当的代码:
文件simstruc.h.
是一个c语言头文件,它定义了酝酿
数据结构及其访问宏。它封装了与模型或S函数有关的所有数据,包括块参数和输出。
有一个酝酿
为Simulink模型分配的数据结构。万博1manbetx模型中的每个S函数都有自己的酝酿
与之相关。这些组织酝酿
s很像文件夹树。这酝酿
与模型相关联的是根酝酿
。任何酝酿
与S函数相关联孩子酝酿
。
Simu万博1manbetxlink产品提供了一组宏,S函数可以用于访问字段酝酿
。看关于Simstruct函数想要查询更多的信息。
文件tmwtypes.h.
是一个c语言头文件,它定义了S函数模板中使用的一组数据类型酝酿
。这些数据类型,例如real_t.
那UINT32_T.
等,提供16,32和64位系统之间的不同数据类型之间切换的方法,允许更大的平台独立性和灵活性。
不需要S函数来使用这些数据类型。例如,您可以编辑示例csfunc.c.
并改变real_t.
至双倍的
和INT_T.
至㈡
。如果您编译和模拟S函数,结果将与使用以前的数据类型相同的结果。
您的S函数可以由三种模式之一编译,由此定义梅克斯
命令或由万博1manbetxSimulink编码器S-功能构建时的产品:
matlab_mex_file.
- 表示S函数正在构建为MEX文件,以便与Simulink产品一起使用。万博1manbetx
RT.
- 表示S函数正在建造万博1manbetxSimulink编码器使用固定步骤求解器的实时应用程序。
NRT.
- 表示S函数正在建造万博1manbetxSimulink编码器使用可变步骤求解器的非实时应用程序的产品。
您使用的构建过程会自动定义S函数的模式。