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