您可以配置一个非虚拟子系统来将子系统代码内联到模型代码中。在“子系统参数”对话框中,设置函数包装参数汽车
或内联
内联子系统生成的代码。
的汽车
选项为默认值。当模型中只有一个子系统实例时,则汽车
选项内联子系统代码。当子系统存在多个实例时,汽车
选项将导致函数的单个副本(作为可重用函数)。对于具有多个调用者的函数调用子系统,将按照指定的方式生成子系统代码那种一次性的功能
.
要内联子系统代码,请选择内联
.的内联
选项显式地指示代码生成器无条件地内联子系统。
为了内联,配置你的子系统:
右键单击子系统块。从上下文菜单中选择块参数(子系统).
在“子系统参数”对话框中,如果子系统是虚拟的,请选择当作原子单位对待.这个选项使子系统是非虚拟的。在代码生成选项卡,函数包装选项现在可用。
如果系统已经是非虚拟的,则函数包装选项已经被选中。
单击代码生成选项卡并选择汽车
或内联
从函数包装参数。
点击应用并关闭对话框。
子系统的边界变厚,表明它是非虚拟的。
当您从模型生成代码时,代码生成器内联其中的子系统代码
或模型
.c
(或在其父系统的源文件中)。你可以通过系统/区块识别标签来识别这个代码,例如:模型
. cpp
/*原子子系统块:/AtomicSubsys1 */
在某些情况下,代码生成器不内联非虚拟子系统,即使内联选项被选中。
如果子系统是由非线性s函数调用的函数调用子系统,则内联选择将被忽略。非线性s函数通过使用函数指针进行调用。因此,函数调用子系统必须生成一个包含所有参数的函数。
在包含函数调用子系统的反馈循环中,代码生成器强制将其中一个子系统作为函数生成,而不是内联它。根据子系统在内部的排序顺序,软件选择要生成的子系统作为一个函数。
如果从设置选项的S-function块调用子系统SS_OPTION_FORCE_NONINLINED_FCNCALL
来真正的
,它不是内联的。当用户定义异步中断块或任务同步如果存在块,则可能出现此结果。这些块必须作为函数生成。这些方块位于vxlib1
块库并使用SS_OPTION_FORCE_NONINLINED_FCNCALL
选择。这个库演示了与示例RTOS (VxWorks)的集成®).[1]
[1]VxWorks是风河公司的注册商标®系统公司。