内联子系统的代码

您可以配置一个非虚拟子系统来将子系统代码内联到模型代码中。在“子系统参数”对话框中,设置函数包装参数汽车内联内联子系统生成的代码。

汽车选项为默认值。当模型中只有一个子系统实例时,则汽车选项内联子系统代码。当子系统存在多个实例时,汽车选项将导致函数的单个副本(作为可重用函数)。对于具有多个调用者的函数调用子系统,将按照指定的方式生成子系统代码那种一次性的功能

要内联子系统代码,请选择内联.的内联选项显式地指示代码生成器无条件地内联子系统。

将子系统配置为内联代码

为了内联,配置你的子系统:

  1. 右键单击子系统块。从上下文菜单中选择块参数(子系统)

  2. 在“子系统参数”对话框中,如果子系统是虚拟的,请选择当作原子单位对待.这个选项使子系统是非虚拟的。在代码生成选项卡,函数包装选项现在可用。

    如果系统已经是非虚拟的,则函数包装选项已经被选中。

  3. 单击代码生成选项卡并选择汽车内联函数包装参数。

  4. 点击应用并关闭对话框。

    子系统的边界变厚,表明它是非虚拟的。

当您从模型生成代码时,代码生成器内联其中的子系统代码模型.c模型. cpp(或在其父系统的源文件中)。你可以通过系统/区块识别标签来识别这个代码,例如:

/*原子子系统块:/AtomicSubsys1 */

例外内联

在某些情况下,代码生成器不内联非虚拟子系统,即使内联选项被选中。

  • 如果子系统是由非线性s函数调用的函数调用子系统,则内联选择将被忽略。非线性s函数通过使用函数指针进行调用。因此,函数调用子系统必须生成一个包含所有参数的函数。

  • 在包含函数调用子系统的反馈循环中,代码生成器强制将其中一个子系统作为函数生成,而不是内联它。根据子系统在内部的排序顺序,软件选择要生成的子系统作为一个函数。

  • 如果从设置选项的S-function块调用子系统SS_OPTION_FORCE_NONINLINED_FCNCALL真正的,它不是内联的。当用户定义异步中断块或任务同步如果存在块,则可能出现此结果。这些块必须作为函数生成。这些方块位于vxlib1块库并使用SS_OPTION_FORCE_NONINLINED_FCNCALL选择。这个库演示了与示例RTOS (VxWorks)的集成®).1

请注意

你可以使用vxlib1库(异步中断任务同步)进行模拟和代码生成。这些块提供了起点示例,以帮助您为目标环境开发自定义块。


1VxWorks是风河公司的注册商标®系统公司。