主要内容

用于C S函数的模板

关于C S函数的模板

使用提供的C MEX S函数模板之一作为创建自己的S函数的起点。模板包含具有解释其使用的评论的回调方法的骨架实现。模板文件,sfuntmpl_basic.c.,包含常用的S函数例程。可以找到包含所有可用例程(以及更多评论)的模板sfuntmpl_doc.c.在同一个文件夹中。

笔记

我们建议您在开发MEX S函数时使用C MEX文件模板。

S函数源文件要求

本节介绍每个S函数源文件必须正确编译的要求。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文件编译

标题文件 描述
matlabroot./ extern /包括/tmwtypes.h. 一般数据类型,例如,real_t.
matlabroot./万博1manbetx simulink /包括/simstruc_types.h. 酝酿数据类型,例如,dtypeid.
matlabroot./ extern /包括/mex.h. 马铃薯®MEX文件API与MATLAB环境接口MEX文件的例程
matlabroot./ extern /包括/矩阵 MATLAB外部接口API例程查询和操作MATLAB矩阵

编译S-函数时使用万博1manbetxSimulink Coder™产品,simstruc.h.包括以下内容。

SIMStruc.h包含的标题文件万博1manbetx编码器产品

标题文件 描述
matlabroot./ extern /包括/tmwtypes.h. 一般类型,例如,real_t.
matlabroot./万博1manbetx simulink /包括/simstruc_types.h. 酝酿数据类型,例如,dtypeid.
matlabroot./ RTW / C / SRC /RT_MATRX.H. Matlab API常规的宏

S-function必须实现的回调方法

您的S函数必须实现以下功能(参见配置C / C ++ S功能功能):

S函数底部所需的陈述

您的S函数必须仅包含主模块末尾的以下拖车代码。

#ifdef matlab_mex_file / *这是被编译为mex文件吗?* / #include“万博1manbetxsimulink.c”/ * mex文件界面机制* / #else #include“cg_sfun.h”/ *代码生成注册func * / #endif

这些语句为特定应用程序选择适当的代码:

  • 万博1manbetxsimulink.c.如果文件被编译为MEX文件,则包含。

  • cg_sfun.h.如果已与文件一起使用万博1manbetxSimulink编码器产品生产独立或实时可执行文件。

    笔记

    此拖车代码不得在任何S函数例程的正文中。

simstruct.

文件simstruc.h.是一个c语言头文件,它定义了酝酿数据结构及其访问宏。它封装了与模型或S函数有关的所有数据,包括块参数和输出。

有一个酝酿为Simulink模型分配的数据结构。万博1manbetx模型中的每个S函数都有自己的酝酿与之相关。这些组织酝酿s很像文件夹树。这酝酿与模型相关联的是酝酿。任何酝酿与S函数相关联孩子酝酿

Simu万博1manbetxlink产品提供了一组宏,S函数可以用于访问字段酝酿。看关于Simstruct函数想要查询更多的信息。

S函数中的数据类型

文件tmwtypes.h.是一个c语言头文件,它定义了S函数模板中使用的一组数据类型酝酿。这些数据类型,例如real_t.UINT32_T.等,提供16,32和64位系统之间的不同数据类型之间切换的方法,允许更大的平台独立性和灵活性。

不需要S函数来使用这些数据类型。例如,您可以编辑示例csfunc.c.并改变real_t.双倍的INT_T.。如果您编译和模拟S函数,结果将与使用以前的数据类型相同的结果。

编译C S函数

您的S函数可以由三种模式之一编译,由此定义梅克斯命令或由万博1manbetxSimulink编码器S-功能构建时的产品:

  • matlab_mex_file.- 表示S函数正在构建为MEX文件,以便与Simulink产品一起使用。万博1manbetx

  • RT.- 表示S函数正在建造万博1manbetxSimulink编码器使用固定步骤求解器的实时应用程序。

  • NRT.- 表示S函数正在建造万博1manbetxSimulink编码器使用可变步骤求解器的非实时应用程序的产品。

您使用的构建过程会自动定义S函数的模式。