主要内容

什么是代码替换?

代码替换是一种更改代码生成器为函数和操作符生成的代码以满足应用程序代码需求的技术。例如,您可以替换生成的代码以满足以下需求:

  • 针对特定运行时环境的优化,包括但不限于特定目标硬件。

  • 与现有应用程序代码集成。

  • 符合标准,如AUTOSAR。

  • 修改代码行为,例如启用或禁用非限定或内联支持。金宝app

  • 应用程序或项目特定的规范要求,例如:

    • 消除math.h

    • 删除系统头文件。

    • 取消呼叫memcpy清零

    • 布拉斯特区的使用。

    • 使用特定BLAS。

若要应用此技术,请将代码生成器配置为在代码生成期间应用代码替换库(CRL)。默认情况下,代码生成器不应用代码替换库。您可以从MathWorks提供的库中进行选择®提供和,您可以使用嵌入式编码器创建和注册®产品。可用库的列表取决于:

  • 安装包的支持。金宝app

  • 系统目标文件、语言、标准数学库和设备供应商配置。

  • 是否已使用嵌入式编码器产品创建和注册库。

包含GNU99扩展的库旨在与GCC编译器一起使用。如果将其中一个库与另一个编译器一起使用,则生成的代码可能无法编译。

代码替换库

一个代码替换库由一个或多个指定特定于应用程序的函数和操作符实现的代码替换表组成。例如,特定嵌入式处理器的库指定了优化该处理器生成代码的函数和操作符替换。

一个代码替换表包含一个或多个代码替换条目,每个条目表示函数或运算符的潜在替换。每个条目映射一个概念表征的函数或运算符实现表示和优先权。

表条目组件 描述
概念表征

标识表项并包含代码生成器的匹配条件。包括:

  • 函数名或键。函数名标识大多数函数。对于运算符和某些函数,一系列字符(称为键)标识函数或运算符。例如,函数名“因为”和操作员键“RTW_OP_ADD”

  • 观察代码生成器命名的概念性参数(“日元”“u1”“u2”,…),以及相应的I/O类型(输出或输入)和数据类型。

  • 其他属性,如算法、定点饱和度和舍入模式,用于确定函数或运算符的匹配条件。

实现表示

指定替换代码。包括:

  • 函数名。例如,“cos_dbl”‘u8_添加_u8_u8’

  • 实现参数,以及相应的I/O类型(输出或输入)和数据类型。

  • 提供额外实现细节的参数,例如头文件和源文件名以及构建资源的路径。

优先事项

定义相对于表中其他项的项优先级。该值的范围为0到100,其中0为最高优先级。如果多个项具有相同的优先级,代码生成器将使用具有该优先级的第一个匹配项。

当代码生成器在代码替换库中查找匹配项时,它将创建并填充调用站点对象用函数或运算符的概念表示。如果存在匹配项,代码生成器将使用使用实现表示填充的匹配代码替换项,并使用它生成代码。

代码生成器按照表在库中出现的顺序在代码替换库中的表中搜索匹配。如果代码生成器在一个表中发现多个匹配项,则优先级决定匹配项。代码生成器使用优先级较高的条目,而不是优先级较低的类似条目。

代码替换术语

术语 释义
缓存命中 在指定的代码替换库中定义的函数或运算符的代码替换项,代码生成器为其查找匹配项。
缓存未命中 代码生成器找不到匹配的函数或运算符的概念表示。
调用站点对象 代码生成器遇到函数或操作符的调用站点时使用的函数或操作符的概念表示。代码生成器使用该对象查询代码替换库以获得概念表示匹配。如果存在匹配项,代码生成器将返回一个代码替换对象,该对象完全填充了概念表示、实现表示和优先级,并使用该对象生成替换代码。
代码替换库 指定特定于应用程序的函数和操作符实现的一个或多个代码替换表。当配置为使用代码替换库时,代码生成器使用库中定义的标准来搜索匹配项。如果找到匹配,代码生成器将用库中定义的特定于应用程序的代码替换默认生成的代码。
代码替换表 一个或多个代码替换表项。提供对相关或共享条目进行分组的方法,以便在不同的库中使用。
代码替换条目 表示函数或运算符的潜在替换。将函数或运算符的概念表示映射到实现表示和优先级。
概念论证 表示要替换的函数或操作符的输入或输出参数。概念论证遵循命名惯例(“日元”“u1”“u2”和代码生成器熟悉的数据类型。
概念表征

表示代码生成器用于限定要替换的函数和操作符的匹配条件。包括:

  • 函数或操作符名称或键

  • 输入和输出具有类型、维度和复杂性规范的概念性参数

  • 属性,例如算法和定点饱和和舍入模式

实现参数 表示C或c++替换函数的输入或输出参数。实现参数遵循C/ c++名称和数据类型规范。
实现表示

指定C或c++替换函数原型。包括:

  • 函数名(例如,“cos_dbl”‘u8_添加_u8_u8’

  • 为函数输入和输出指定类型、类型限定符和复杂性的实现参数

  • 提供生成信息的参数,例如头文件名、源文件名、生成资源路径以及编译和链接标志

关键 标识要替换的函数或运算符。函数名或键出现在代码替换项的概念表示中。键RTW_OP_ADD标识加法运算符。
优先事项 定义代码替换项相对于代码替换库中具有相同名称和概念参数列表的其他项的匹配优先级。优先级范围为0到100,其中0为最高优先级。默认值为100。如果库为函数或运算符提供两种实现,则实现优先级越高,则优先级越低。

代码替换限制

代码替换验证-代码替换的行为可能与您预期的不同。例如,在代码生成器输入中观察到的数据类型可能与代码生成器在操作期间用作中间数据类型的数据类型不匹配。通过检查生成的代码来验证代码替换。

矩阵的代码替换——代码替换库不支持动态和符号大小的矩阵。金宝app

相关的话题