主要内容

生成代码中的参数数据类型

块参数的数据类型(例如获得a的参数获得block),数值MATLAB®变量或者金宝app仿真软件。参数对象确定生成代码中对应实体使用的数据类型(例如,全局变量或函数的参数)。为了生成更高效的代码,可以将参数数据类型与信号数据类型匹配,或者将参数存储在更小的数据类型中。

有关在模型中设置块参数数据类型的基本信息,请参见控制块参数数据类型

参数数据类型的重要性

块参数、MATLAB变量或参数对象使用的数据类型决定了生成的代码用于在内存中存储参数值的数据类型。例如:

  • 如果您设置了模型配置参数默认参数行为(见默认参数行为)可调,获得a的参数获得Block作为存储参数数据的全局结构的字段出现在生成的代码中。如果应用该数据类型对于模型中的块参数,代码中的结构字段使用相应的数据类型,real32_T

  • 如果应用存储类ExportedGlobal到一个金宝app仿真软件。参数对象时,对象在生成的代码中作为单独的全局变量出现。如果你设置数据类型对象的属性int8,代码中的全局变量使用相应的数据类型,int8_T

  • 如果您配置了金宝app仿真软件。参数对象作为模型参数出现在模型工作区中,则对象在生成的代码中作为模型入口点函数的正式参数(参数)出现,例如一步函数。的数据类型对象的属性决定形式参数的数据类型。

除了确定生成的代码用来在内存中存储参数值的数据类型外,参数、变量或对象的数据类型还可以:

  • 导致块在代码生成之前强制转换参数的值。强制转换可能导致溢出、下溢或量化。

  • 导致生成的代码包含额外的代码,例如饱和代码。

参数数据类型不匹配导致类型转换

当块参数、工作区变量和信号的数据类型不同时,块可以使用类型转换来调和数据类型不匹配。这些类型转换可以导致生成的代码算法,包括模型一步函数,包括显式强制转换以调和存储数据类型中的不匹配,以及C位移位以调和定点缩放中的不匹配。

参数数据类型不匹配可能发生在以下情况:

  • 为MATLAB变量或参数对象指定的数据类型(金宝app仿真软件。参数)与块参数的数据类型不同。块形参对变量或对象的值进行类型转换。

  • 为初始值指定的数据类型与初始化信号或状态的数据类型不同。

  • 为块参数指定的数据类型与该参数操作的信号的数据类型不同。有些块对参数进行类型转换来执行该操作。例如,获得Block执行此类型转换。

如果将变量或对象配置为使用偏置或分数定点斜率,则块参数不能执行类型转换。在这种情况下,必须将变量或参数对象的数据类型与块参数的数据类型匹配。使用以下技巧之一:

  • 对变量或参数对象使用上下文敏感的数据类型。对于MATLAB变量,使用a编号,以设置变量的值。对于参数对象,设置数据类型财产汽车

  • 使用一个金宝app仿真软件。AliasType金宝app仿真软件。NumericType对象设置块参数的数据类型和参数对象的数据类型。

    当您不能依赖上下文敏感的数据类型时,请使用此技术,例如,当您使用结构的字段设置块参数的值时。

  • 手动为块参数和变量或参数对象指定相同的数据类型。

    使用这种技术可以减少模型对继承的和上下文敏感的数据类型以及外部变量和对象的依赖。

对于在生成的代码中通过指针或引用访问参数数据的块,如果您为工作区变量和块参数指定不同的数据类型,生成的代码将隐式地将变量的数据类型转换为块参数的数据类型。注意,隐式强制转换需要数据副本,这可能会显著增加RAM消耗,并降低大型数据集的代码执行速度。例如,Lookup Table块经常通过生成代码中的指针或引用访问大型向量或矩阵。

有关使用模型参数时匹配参数数据类型的信息,请参见模型参数和参数值的控制数据类型

检测由于数据类型不匹配导致的向下转换和精度损失

您可以配置诊断配置参数,以检测导致量化和参数精度损失的意外数据类型不匹配。看到模型配置参数:数据有效性诊断

对其他建模模式的考虑

当您使用特定的建模模式和构造(如定点数据类型、参数结构和查找表对象)时,请使用不同的技术来控制参数数据类型。

可调参数和最佳精度定点缩放

若要对可调块参数或参数对象应用最佳精度的定点缩放,可以使用定点工具自动缩放整个系统,或使用数据类型助手配置单个参数或对象。看到计算可调块参数的最佳精度定点缩放

如果可调参数使用最佳精度定点缩放,则Simulink金宝app®根据为参数指定的最小值和最大值选择数据类型(请参阅指定块参数的最小值和最大值).属性的属性中指定这些值金宝app仿真软件。参数对象。

如果没有指定最小值或最大值,Simulink将根据参数的值选择数据类型。金宝app所选择的缩放可能会限制可能调优值的范围。因此,为每个可调参数指定最小值和最大值是最佳实践。

即使没有在参数数据类型中指定可调参数,也可以使用最佳精度缩放。例如,获得块可以选择一个最佳精度缩放如果参数数据类型在块对话框中设置为继承:通过内部规则继承.此设置是块的默认设置。

控制结构字段的数据类型

当使用结构作为块参数的值时(例如初始化总线信号),或者当将多个块参数值组织到单个结构中时,可以创建金宝app仿真软件。公共汽车类的数据类型金宝app仿真软件。参数对象。然后可以控制结构中各个字段的数据类型。看到通过创建参数对象控制字段数据类型和特征而且初始条件结构字段的控制数据类型

控制查找表对象的数据类型

当你使用金宝app仿真软件。LookupTable而且金宝app仿真软件。断点对象来存储查找表块的表和断点数据,要控制表和断点数据的数据类型,请使用以下技术之一:

  • 设置价值嵌入式的属性金宝appSimulink.lookuptable.Table而且金宝appSimulink.lookuptable.Breakpoint对象,使用非类型化表达式,如[1 2 3],该函数返回向量。如果断点规范设置为明确的价值观,使用MATLAB表达式文本框和表格界面底部的属性对话框。若要控制数据类型,请设置数据类型属性的值汽车

    使用此技术将表或断点数据的值与数据类型分离,这可以提高设计的可读性和可理解性。然后你可以使用a金宝app仿真软件。NumericType金宝app仿真软件。AliasType对象:

    • 在生成的代码中定制数据类型的名称。

    • 将表或断点数据的数据类型与模型中信号的数据类型匹配。

  • 设置价值属性,使用类型化表达式单([1 2 3]).要使用定点数据类型,请设置价值属性fi对象。如果断点规范设置为明确的价值观,使用MATLAB表达式文本框和表格界面底部的属性对话框。

    设置数据类型属性设置为默认值,汽车.表和断点数据然后获取用于设置价值财产。

    类型中的数据类型信息使用此技术存储价值属性,该属性可以简化与金宝app仿真软件。LookupTable而且金宝app仿真软件。断点对象。你可以离开数据类型属性设置为默认值。

    中更改断点或表数据时价值属性时,使用类型化表达式保存数据类型信息。或者,如果您在命令提示符中使用命令或脚本来更改数据,为了避免使用类型化表达式,请使用下标赋值,(:)

    myLUTObject.Table.Value(:) = [4 5 6];

    中存储的数据更改时价值属性,如果不使用类型化表达式或下标赋值,则会丢失数据类型信息。

当块在子系统中使用金宝app仿真软件。LookupTable金宝app仿真软件。断点对象时,不能设置数据类型覆盖(请参阅控制定点插装和数据类型覆盖)只在子系统上。相反,在整个模型上设置数据类型覆盖。

参数对象中表达式的数据类型

您可以使用表达式来设置参数对象的值(例如金宝app仿真软件。参数).表达式编码不同对象之间的数学关系。当您使用这种技术时,将应用不同的数据类型规则。看到使用数学表达式设置变量值

相关的话题