文档

代码替换的数据对齐

代码替换库可以将传入替换函数的数据对象对齐到指定的边界。

代码替换数据对齐

在使用时,可以利用需要对齐数据的函数实现来优化应用程序性能MATLAB®编码器™.为函数实现配置数据对齐:

  1. 在代码替换条目中指定数据对齐要求。为每个实现函数参数单独指定对齐方式,或为所有函数参数共同指定对齐方式。看到为函数实参指定数据对齐要求

  2. 为一个或多个编译器指定数据对齐功能和语法。控件的库注册条目中包含对齐规范rtwTargetInfo.m文件。看到为编译器提供数据对齐规范

  3. 注册包含表项和对齐规范对象的库。

  4. 配置代码生成器以使用代码替换库并生成代码。观察结果。

有关示例,请参见代码替换数据对齐的基本示例的“函数实现的数据对齐”部分通过开发和使用代码替换库- 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

  • DATA_ALIGNMENT_LOCAL_VAR—局部变量。

  • DATA_ALIGNMENT_GLOBAL_VAR-全局变量。

  • DATA_ALIGNMENT_STRUCT_FIELD—单个结构字段。

  • DATA_ALIGNMENT_WHOLE_STRUCT-整个结构,带填充(单个结构字段对齐,如果指定,优先于整个结构对齐)。

每个对齐规范必须至少指定DATA_ALIGNMENT_GLOBAL_VAR而且DATA_ALIGNMENT_STRUCT_FIELD

AlignmentPosition 对齐的位置

预定义的枚举字符串,指定必须放置编译器对齐类型的对齐指令的位置DATA_ALIGNMENT_WHOLE_STRUCT

  • DATA_ALIGNMENT_PREDIRECTIVE-对齐指令之前发出struct st_tag{…},作为类型定义语句(例如,MSVC)的一部分。

  • DATA_ALIGNMENT_POSTDIRECTIVE-对齐指令在之后发出struct st_tag{…},作为类型定义语句(例如,gcc)的一部分。

  • DATA_ALIGNMENT_PRECEDING_STATEMENT对齐指令作为一个独立的语句发出,紧接在结构类型定义的前面。分号(;)必须终止注册的对齐语法。

  • DATA_ALIGNMENT_FOLLOWING_STATEMENT对齐指令作为一个独立的语句发出,紧跟着结构类型的定义。分号(;)必须终止注册的对齐语法。

用于其他对齐类型DATA_ALIGNMENT_WHOLE_STRUCT,代码生成使用对齐位置DATA_ALIGNMENT_PREDIRECTIVE

AlignmentSyntaxTemplate 对齐的语法

指定编译器支持的对齐指令字符串。金宝app字符串注册为语法模板,其中包含占位符。支持以下占位符:金宝app

  • % n-替换为替换函数参数的对齐边界。

  • % s-替换为对齐的符号,通常是变量的标识符。

例如,对于gcc编译器,您可以指定__attribute__((对齐(% n))),或者对于MSVC编译器,使用__declspec(对齐(% n))

金宝appSupportedLanguages 金宝app支持的语言

指定此对齐规范应用到的语言的单元格数组c而且c++.有时,在不同的编译器语言之间,对齐语法和位置是不同的。

以下是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入口点或导出函数是导入数据吗x1x2,y不是由代码生成器自动对齐的。的编码器。DataAlignment这些变量的语句只能作为代码生成器的信息。为数据分配内存的调用站点需要确保数据按照指定对齐。

还可以为导出的数据指定代码替换数据对齐方式,例如全球变量或ExportedGlobal存储类。有关更多信息,请参见您可以选择的内置存储类而且为控制生成代码中的数据表示选择存储类

相关的话题