要使用从模型生成的代码,可以调用生成的入口点函数,例如步
和初始化
.调用环境和生成的函数通过全局变量或形式参数(参数)交换输入和输出数据。此数据和交换机制构成入口点函数的接口。有关生成代码中可重入和不可重入模型的默认接口的信息,请参阅生成的代码如何与环境交换数据.
通过控制生成的代码中出现的接口,您可以:
尽量减少对现有代码的修改。
生成稳定的接口,当您对模型进行更改时,这些接口不会更改或最小程度更改。
生成更有效地交换数据的代码(例如,使用指针和非标量数据的引用传递参数)。
默认情况下,对于非进入代码,输入模型根级别的块在生成的代码中显示为全局结构变量的字段,外港块以不同的结构出现。对于可重入代码,取决于模型配置参数的设置通过根级I / O,代码生成器还可以将输入和输出数据打包到标准结构中。
嵌入式编码器®,您可以控制这些名称。请参阅数据结构的控制特性(嵌入式编码器)(金宝app仿真软件编码器)。
要使用生成的代码,您需要编写调用生成的入口点函数的代码
,模型
_台阶
,以及从导出函数模型生成的顶级函数。为了控制模型入口点函数的名称,使用代码映射编辑器(需要Embedded Coder)来应用这些技术的组合:模型
_initialize
在功能默认值选项卡中,通过在“代码映射编辑器”(Code Mappings editor)中应用函数自定义模板来指定入口点函数类别的默认命名规则。使用此技术,命名规则将应用于类别中的函数。有关详细信息,请参阅配置函数的默认代码生成.
在功能选项卡,通过直接编辑函数名列中打开的配置对话框功能预览专栏。指定的名称将覆盖函数自定义模板指定的默认命名规则。有关详细信息,请参阅定制生成的C函数接口
当您设置模型配置参数时代码接口封装来不可逆函数
(默认情况下),生成的入口点函数不可重入。通常,这些函数通过直接访问全局变量与调用环境交换数据。
要通过创建一个单独的全局变量从标准I/O结构中删除块,可以应用一个存储类,例如出口全球
或出口文件
,转换为块所代表的信号。
为指定默认存储类的步骤输入块和不同的默认值外港块,使用代码映射编辑器。当您将这些块添加到模型中时,它们将获取您指定的存储类。您不需要配置每个单独的块。
对于这种技术,您必须具有嵌入式编码器。
要替代单个块的默认值,请使用其他工具(如模型数据编辑器或特性检查器)应用不同的存储类。看见将存储类应用于单个信号、状态和参数数据元素(金宝app仿真软件编码器)。
有关示例,请参见通过配置输入和输出块来设计数据接口(金宝app仿真软件编码器)。有关存储类的一般信息,请参见选择存储类以控制生成代码中的数据表示(金宝app仿真软件编码器)。
如果调用代码已经定义了一个全局变量,希望生成的代码使用该全局变量作为输入数据或存储输出数据,则可以通过防止代码生成器重复定义来重用该变量。将存储类应用到相应的输入或外港块在模型中。选择指定导入数据范围的存储类,例如进口外销商
或导入文件
.有关应用存储类的信息,请参见将存储类应用于单个信号、状态和参数数据元素(金宝app仿真软件编码器)和将内置和自定义存储类应用于数据元素.
您可以配置单个输入或外港块作为包含多个输入或输出信号的自定义结构出现在生成的代码中。还可以将块配置为显示为默认I/O结构的子结构或单独的结构变量。
通过使用金宝app模拟总线
对象作为块的数据类型。如果外部代码定义结构类型,请考虑使用金宝appSimulink.ImportTexternalTypes
函数生成总线对象。
要生成总线信号作为标准I/O结构中的子结构,请将块存储类保留为默认设置,汽车
。如果您有嵌入式编码器,请在“代码映射编辑器”中的数据默认值选项卡,设置类别的存储类港口和前哨来违约
.
要将总线信号生成为一个单独的全局结构变量,请应用一个存储类,例如出口全球
或出口文件
.
有关将信号分组到生成代码中的自定义结构的详细信息,请参见在生成的代码中将数据组织到结构中.
如果外部代码定义了一个函数,该函数返回生成代码的输入数据或接受生成代码生成的输出数据,则可以配置输入或外港块,以便生成的代码调用函数,而不是访问全局变量。应用嵌入式编码器存储类GetSet
.有关更多信息,请参见通过具有存储类GetSet的函数访问数据.
使用Embedded Coder,您可以选择性地配置模型步骤(执行)函数,以通过参数访问根级输入和输出,而不是直接读写全局变量。完全控制参数特征,如名称、顺序和传递机制(通过引用或值)。这种级别的配置有助于将生成的代码与外部代码集成在一起。
要通过参数传递输入和输出,请在“配置C步骤函数接口”对话框中选择为步骤函数原型配置参数. 每个输入和外港模型根级别的块作为执行函数的参数出现在代码中。有关更多信息,请参阅定制生成的C函数接口.
void-void
)默认情况下,对于不可重入引用模型,生成的代码通过函数参数传递根级输入和输出。不可重入引用模型是在其中设置模型配置参数的模型每个top模型允许的实例总数来一个
.
将此数据通过全局变量传递(对于avoid-void
接口),在引用的模型中,应用存储类,例如出口全球
和出口文件
根级输入和外港块。
要对这些块应用默认存储类,请使用代码映射编辑器,它需要Embedded Coder。使用这种技术,当您将这些块添加到模型中时,这些块将获得默认存储类,从而保留void-void
接口。有关更多信息,请参见配置数据的默认代码生成.
要覆盖默认存储类,请使用模型数据编辑器将存储类直接应用到单个块。看到将存储类应用于单个信号、状态和参数数据元素.
有关需要Embedded Coder的示例,请参见在组件系统中建立数据所有权.
当你设定代码接口封装来可重用函数
,生成的入口点函数是可重入的。函数通过形式参数(实参)与调用环境交换数据。默认情况下,每个根级输入和外港块在生成的代码中显示为单独的参数,而不是标准I/O结构的字段。
要减少参数的数量,请参见通过使用结构减少参数的数量(金宝app仿真软件编码器)。
若要控制参数的数据类型,请参见控制参数的数据类型(金宝app仿真软件编码器)。
对模型所做的某些更改会更改生成代码中的入口点函数接口。例如,如果更改模型的名称,则函数的名称可能会更改。如果将模型代码配置为通过参数交换数据,则在添加或删除时输入或外港块或更改块的名称,相应的参数可以更改。
为了更容易维护调用代码,请防止更改入口点函数的接口。
如果通过参数交换输入和输出数据,请将生成的代码配置为打包输入和外港块进入结构,而不是允许每个块作为单独的参数出现(默认)。然后,当你添加或删除输入或外港块,或改变它们的属性,如名称和数据类型,结构的字段会改变,但函数接口不会改变。看到通过使用结构减少参数的数量.
的数据类型输入和外港显式块,而不是使用继承的数据类型设置(这些块默认使用该设置)。继承的数据类型设置可能导致块根据上游和下游信号的数据类型使用不同的数据类型。有关配置数据类型的更多信息,请参阅控制信号数据类型(金宝appSimulink)。
使用嵌入式编码器,指定不依赖于模型名的函数名。如果使用函数自定义模板指定命名规则,请不要使用标记$R
在规则中。请参见生成的入口点函数的控件名称(嵌入式编码器)(金宝app仿真软件编码器)。
减少函数的参数数量可以提高代码的可读性并减少堆栈内存的消耗。要创建可以同时传递多个数据段的结构参数,请使用以下技术:
手动合并多个输入或外港块,使其在生成的代码中显示为标准数据结构的结构或子结构的字段。生成的入口点函数或函数接受结构的地址作为单独的参数或标准I/O结构的子结构(字段)。
取代输入或外港使用单个块块,并通过使用金宝app模拟总线
对象作为块的数据类型。如果外部代码定义结构类型,请考虑使用金宝appSimulink.ImportTexternalTypes
函数生成总线对象。看见在生成的代码中将数据组织到结构中和金宝appSimulink.ImportTexternalTypes
.
使用嵌入式编码器生成可重入代码时,请配置输入和外港默认情况下出现在聚合结构中的块。设定模型组态参数将根级别I/O传递为设置为除个人论点
.
打包输入和外港块进入实时模型数据结构,选择模型数据结构的一部分
.代码生成器将这些块聚合到实时模型数据结构所指向的默认I/O结构中。生成的入口点函数接受实时模型数据结构作为单个参数。如果选择此设置,则函数的参数数量最小。
聚合输入将块放入结构中,然后外港如果要将块转换为其他结构,请选择结构参考
.生成的一个或多个入口点函数接受每个结构的地址作为参数。另一个参数接受实时模型数据结构。如果选择此设置,则在函数接口中更容易识别输入和输出。
使用此设置,如果删除根级别输入块或根级别外港块,函数签名可以更改。类似地,如果添加根级别,签名可能会更改输入或外港块转换为不包含此类块的模型。
为了更多地控制结构的特性,设置将根级别I/O传递为来模型数据结构的一部分
。然后,为设置默认存储类输入和外港块到您创建的结构化存储类。使用此技术:
您可以为块创建单个结构,也可以创建两个独立的结构。
您可以控制结构类型的名称。
这些结构显示为实时模型数据结构的子结构。必须设置将根级别I/O传递为来模型数据结构的一部分
.
使用嵌入式编码器字典创建存储类(参见为软件体系结构定义存储类、内存段和功能模板)。使用代码映射编辑器应用存储类(请参见配置数据的默认代码生成).
有关更多信息,请参见将根级别I/O传递为(金宝app仿真软件编码器)。
您可以将生成的入口点函数配置为通过参数交换数据。对于标量或数组参数,要控制基元数据类型的名称,请使用金宝app仿真软件。AliasType
对象设置相应块的数据类型或为整个模型配置数据类型替换。这些技术需要嵌入式编码器。有关详细信息,请参阅生成代码中的控件数据类型名称.
默认情况下,代码生成器假定输入和外港模型根级别的块构成模型的数据接口。您可以将任意信号、块参数或块状态升级到接口,以便其他系统和组件可以访问它。请参阅将内部数据升级到接口.