代码替换的数据对齐
代码替换库可以将传入替换函数的数据对象对齐到指定的边界。
代码替换数据对齐
在使用时,可以利用需要对齐数据的函数实现来优化应用程序性能MATLAB®编码器™.为函数实现配置数据对齐:
在代码替换条目中指定数据对齐要求。为每个实现函数参数单独指定对齐方式,或为所有函数参数共同指定对齐方式。看到为函数实参指定数据对齐要求.
为一个或多个编译器指定数据对齐功能和语法。控件的库注册条目中包含对齐规范
rtwTargetInfo.m
文件。看到为编译器提供数据对齐规范.注册包含表项和对齐规范对象的库。
配置代码生成器以使用代码替换库并生成代码。观察结果。
有关示例,请参见代码替换数据对齐的基本示例的“函数实现的数据对齐”部分通过开发和使用代码替换库- Simulink®优化生成的代码金宝app示例页面。
请注意
如果需要对齐的替换使用导入数据(例如,入口点函数或导出函数的I/O),请指定与的数据对齐coder.dataAlignment
语句在MATLAB代码中。为导入数据的每个实例分别指定对齐方式。看到在导入数据的MATLAB代码中指定数据对齐.
为函数实参指定数据对齐要求
为代码替换条目中的参数指定数据对齐要求:
如果在代码替换表注册文件中定义替换函数,则创建一个参数描述符对象(
环球套票。ArgumentDescriptor
).使用它的AlignmentBoundary
属性以指定所需的对齐边界并将对象分配给参数描述符
财产。方法定义替换函数代码替换工具,在映射信息选项卡,在参数属性部分为替换函数,输入值为对齐值参数。
的AlignmentBoundary
财产(或对齐值参数)指定传递给函数实参的数据的对齐边界,以字节数为单位。的AlignmentBoundary
属性仅对可寻址对象有效,包括矩阵和指针参数。它不适用于值实参。有效值为:
-1
(默认)—如果数据是金宝app仿真软件。公共汽车
,金宝app仿真软件。信号
,或金宝app仿真软件。参数
对象,指定代码生成器根据使用情况确定最佳对齐方式。否则,指定此实参没有对齐要求。2的幂的正整数,不超过128 -指定边界的字节数。为函数参数分配的数据的起始内存地址是指定值的倍数。如果指定的对齐边界小于参数数据类型的自然对齐,则在生成的代码中发出对齐指令。然而,目标编译器会忽略该指令。
下面的代码指定AlignmentBoundary
参数为16字节。
hLib = RTW.TflTable;entry = RTW.TflCOperationEntry;arg = getTflArgFromString(hLib,‘u1’,“单*”);desc = RTW.ArgumentDescriptor;desc.AlignmentBoundary = 16;参数。描述符= desc;entry.Implementation.addArgument (arg);
代码替换工具对话框中的等效对齐边界规范见此图。
请注意
如果您的模型导入金宝app仿真软件。公共汽车
,金宝app仿真软件。参数
,或金宝app仿真软件。信号
对象,在对象属性中指定对齐边界对齐财产。有关更多信息,请参见金宝app仿真软件。公共汽车
,金宝app仿真软件。参数
,金宝app仿真软件。信号
.
为编译器提供数据对齐规范
要在生金宝app成的代码中支持数据对齐,请在代码替换库注册中描述编译器的数据对齐功能和语法。为库注册表项中的每个编译器提供一个或多个对齐规范。
描述编译器的数据对齐功能和语法:
类中定义代码替换库注册项
rtwTargetInfo.m
自定义文件,添加一个或多个AlignmentSpecification
的对象环球套票。DataAlignment
对象。附加环球套票。DataAlignment
反对TargetCharacteristics
对象的值。的
环球套票。DataAlignment
对象也具有属性DefaultMallocAlignment
,它以字节为单位指定默认对齐边界,编译器将使用该对齐边界动态分配内存。如果代码生成器对涉及代码替换的数据对象使用动态内存分配,则此值确定内存是否满足替换的对齐要求。如果不是,则代码生成器不使用替换。的默认值。DefaultMallocAlignment
是-1
,表示用于动态分配内存的默认对齐边界未知。在这种情况下,代码生成器使用数据类型的自然对齐来确定是否允许替换。方法为复杂类型指定对齐边界
addComplexTypeAlignment
函数。如果您正在使用代码替换工具生成定制文件函数,请为每个编译器填写以下字段。
单击加号(+)符号可添加其他编译器规范。
对于每个数据对齐规范,提供以下信息。
AlignmentSpecification 财产 |
对话框参数 | 描述 |
---|---|---|
AlignmentType |
对齐类型 | 预定义枚举字符串的单元格数组,指定此规范支持的对齐类型。金宝app
每个对齐规范必须至少指定 |
AlignmentPosition |
对齐的位置 | 预定义的枚举字符串,指定必须放置编译器对齐类型的对齐指令的位置
用于其他对齐类型 |
AlignmentSyntaxTemplate |
对齐的语法 | 指定编译器支持的对齐指令字符串。金宝app字符串注册为语法模板,其中包含占位符。支持以下占位符:金宝app
例如,对于gcc编译器,您可以指定 |
金宝appSupportedLanguages |
金宝app支持的语言 | 指定此对齐规范应用到的语言的单元格数组 |
以下是GCC编译器的数据对齐规范:
da = RTW.DataAlignment;as = RTW.AlignmentSpecification;作为。AlignmentType = {“DATA_ALIGNMENT_LOCAL_VAR”,...“DATA_ALIGNMENT_STRUCT_FIELD”,...“DATA_ALIGNMENT_GLOBAL_VAR”};作为。AlignmentSyntaxTemplate =“使用__attribute__((对齐(% n)))”;作为。AlignmentPosition =“DATA_ALIGNMENT_PREDIRECTIVE”;作为。金宝app支持的语言= {“c”,“c++”};da.addAlignmentSpecification ();tc = RTW.TargetCharacteristics;tc。DataAlignment = da;
这里是相应的规格生成的定制对话框。
指定数据对齐方式MATLAB导入数据代码
如果MATLAB编码器需要数据对齐的代码替换使用导入数据,例如入口点或导出函数I/O,指定外部代码的数据对齐coder.dataAlignment
语句在MATLAB代码中。
如果MATLAB编码器代码替换发生在需要数据对齐(使用导入数据)的情况下,例如带有I/O的入口点或导出函数,指定代码替换数据对齐编码器。DataAlignment
语句在MATLAB代码中。
在MATLAB代码中指定导入数据的数据对齐要求:
对于需要数据对齐的导入数据的每个实例,在函数中用
coder.dataAlignment
陈述的形式:coder.dataAlignment ('
varName
',align_value
)的
varName
需要对齐信息规范的变量名的字符数组。的align_value
是一个整数,应该是2的幂,从2到128。此数字指定2字节的功率对齐边界。一个指定数据对齐的示例函数是:
函数y = testFunction(x1,x2) code . dataalignment (x1的16);%指定信息coder.dataAlignment (“x2”16);%指定信息coder.dataAlignment (“y”16);%指定信息Y = x1 + x2;结束
如果testFunction
入口点或导出函数是导入数据吗x1
,x2
,y
不是由代码生成器自动对齐的。的编码器。DataAlignment
这些变量的语句只能作为代码生成器的信息。为数据分配内存的调用站点需要确保数据按照指定对齐。
还可以为导出的数据指定代码替换数据对齐方式,例如全球
变量或ExportedGlobal
存储类。有关更多信息,请参见您可以选择的内置存储类而且为控制生成代码中的数据表示选择存储类.