S-功能和代码生成

您可以使用S-功能扩展的Simulink万博1manbetx®万博1manbetx用于仿真和代码生成支持。例如,你可以使用它们来:

  • 代表自定义算法

  • 接口与Simulink模型现有的外部码和所生成的代码万博1manbetx

  • 代表的设备驱动程序与硬件接口

  • 生成用于嵌入式系统的高度优化的代码

  • 验证一个子系统生成代码作为Simulink仿真的一部分万博1manbetx

编写S-功能的应用程序接口(API),可以实现在Simulink环境中泛型算法用具有很大的灵活性。万博1manbetx如果您打算在代码生成一个模型中使用的S-功能,灵活性的水平可以改变。例如,它无法访问MATLAB®工作区从S函数,你的代码生成器使用。本主题介绍情况做到心中有数,使用S-功能。但是,使用本主题中提出的技术,可以为大多数应用程序与生成的代码创建工作S-功能。

尽管S-函数提供用于在存储器和计算资源方面的开销在一个模型中实施复杂的算法,底层API即被一般和灵活的解决方案。大多数时候,额外的资源是实时快速原型系统可以接受的。不过,通常来说,更多的资源在实时嵌入式应用不可用。你可以最大限度地减少存储和使用提供了代码生成目标语言编译器技术,内嵌的S-函数的计算需求。如果你是生产用于现有外部代码的S-功能,可以考虑使用遗留代码工具来生成S-功能和相关TLC文件。

本主题假定您了解以下概念:

  • 水平-2 S-功能

  • 目标语言编译器(TLC)的脚本

  • 如何的代码发生器产生并建立C / C ++代码

笔记

该信息对于代码生成器的用户。即使你目前不使用的代码生成器,编写S函数的时候,特别是当你创建通用的S-功能遵循这些做法。

S-功能的种类

而您可能会选择实施S-功能仿真和代码生成的例子包括:

  1. “我不关心效率。我想写我的算法的一个版本,并把它在Simulink和代码生成器产品自动工作“。s manbetx 845万博1manbetx

  2. “我想实现在Simulink和代码生成产品高度优化的算法,看起来像一个内置的块,并产生高效的代码。”s manbetx 845万博1manbetx

  3. “我有很多的手工编写的代码,我需要的接口。我想打电话效率从Simulink和代码生成产品我的职责。”s manbetx 845万博1manbetx

分别如前述场合映射到以下MathWorks公司®术语:

  1. Noninlined S-功能

  2. 内联S-功能

  3. 自动生成的S函数为外部代码

Noninlined S-功能

甲noninlined S-函数是C或C ++ MEX由所述的Simulink发动机和生成的代码同样处理S-功能。万博1manbetx在一般情况下,你实现你的算法根据S函数API一次。Simu万博1manbetxlink的引擎和生成的代码调用S函数例程(例如,mdlOutputs)模型执行期间。

额外的存储器和计算资源都需要一个noninlined S-功能块的每个实例。然而,结合算法为模型和代码生成应用这个程序是在一个项目中,效率是不重要的原型阶段的典型。由前述效率获得的优点是能够变化的模型参数和结构迅速。

编写noninlined S-功能不涉及TLC编码。Noninlined S-功能是在这个意义上构建过程默认情况下,一旦你在模型建立MEX S函数,没有额外的准备按之前按Ctrl + B构建模型。

生成生成文件时存在下面一些限制有关的noninlined S函数文件的名称和位置。看到写Noninlined S-功能

内联S-功能

对于S-功能,在Simulink环境中工作,会产生一些开销代码万博1manbetx。当码发生器从包含S-功能模型生成码(不sfunction.tlc文件),它嵌入一些在生成的代码这种开销代码。如果你想优化你的实时代码和消除一些开销代码,您必须排队(或嵌入)您的S-功能。这涉及编写TLC(sfunction.tlc)文件,消除了从所生成的代码开销代码。目标语言编译器进程sfunction.tlc文件定义如何内联的S函数算法生成的代码。

注意

不要混淆术语排队与C ++排队关键词。内嵌手段到位的调用指定文本一般的S函数API程序(例如,mdlOutputs)。例如,当一个TLC文件用于内联的S函数,生成的代码包含C / C ++代码,通常出现在S-功能程序和已经从构建过程除去S-函数本身内。

一个完全内联S函数建立你的算法(数据块)到生成的代码的方式,是从不能区分一个内置的块。通常情况下,一个完全内联的S-功能需要您实现您的两次算法:曾经为Simulink模型(C / C ++ MEX S函数),一旦代码生成(TLC文件)。万博1manbetx在该TLC文件的复杂性依赖于你的算法的复杂性和效率的尝试中生成的代码来达到的水平。TLC文件从简单的变化,以结构复杂。看到内联S-功能

对于传统或自定义代码自动生成的S-功能

如果你需要在你的模型来调用手工编写的C / C ++代码,可以考虑使用Simulink的遗留代码的工具。万博1manbetx遗留代码工具可以根据您的遗留代码工具的数据结构,注册信息自动执行完全内联的S函数的产生和相应的TLC文件。

欲了解更多信息,请参阅使用集成遗留代码工具C函数(万博1manbetxSimulink的),看看导入调用外部代码到生成的代码修改代码工具

文件要求实施Noninlined和内联S-功能

本主题简要介绍您需要创建noninlined和内联的S-功能的文件和功能。

  • Noninlined S-功能所需要的C或C ++ MEX S函数的源代码(sfunction。C要么sfunction的.cpp)。

  • 完全内联的S-功能需要sfunction.tlc文件。完全内联的S-功能产生用于参数化S-函数的最优代码。这是一个S-函数,在一个特定的模式依赖于固定S函数参数模型执行过程中不改变操作。对于给定的操作模式下,sfunction.tlc文件指定其被生成以执行该模式的算法的确切代码。例如,直接索引查找表S函数在编写完全可与常规mdlRTW内联S-功能包含两个操作模式 - 一个用于均匀地间隔X-数据和一个用于不均匀地间隔开X-数据

    注意

    所产生的调用传统或定制C / C ++代码完全内联的S-功能也需要一个sfunction.tlc文件,该文件被遗留代码工具生成。

完全内联的S-功能可能需要的安置mdlRTW在常规的S-功能MEX文件sfunction。C要么sfunction的.cpp。该mdlRTW程序可以让你的地方信息模型.rtw模型.rtw是记录文件,指定的模型,并且其中所述代码生成器调用目标语言编译器来处理执行之前sfunction.tlc生成代码时。

包括mdlRTW当你想介绍不可调整参数到您的TLC文件例程是有用的。这种参数被用来确定哪个工作模式是在S-函数的给定实例的活性。基于该信息,对S-功能的TLC文件可以生成用于该操作模式的高效,优化代码。

写作指南S-功能,支持代码生成万博1manbetx

  • 您可以使用C / C ++ MEX,MATLAB语言和Fortran MEX S函数代码生成。

  • 您可以通过提供内嵌TLC文件内联代码生成的S-功能。见S-内联函数中目标语言编译器。MATLAB和Fortran MEX S函数必须被内联。C / C ++ MEX S-功能可以被内联代码效率,或noninlined。

  • 自动生成调用遗留或自定义代码完全内联C MEX S函数,使用旧代码的工具。欲了解更多信息,请参阅使用集成遗留代码工具C函数(万博1manbetxSimulink的),看看导入调用外部代码到生成的代码修改代码工具

  • 如果代码效率不是重要的考虑,例如,如果是快速成型,则可以选择不内联一个C / C ++ MEX S函数。欲了解更多信息,请参阅写Noninlined S-功能

相关话题