什么是代码替换?
代码替换是一种更改代码生成器为函数和操作符生成的代码以满足应用程序代码需求的技术。例如,你可以替换生成的代码来满足如下需求:
针对特定运行时环境的优化,包括但不限于特定的目标硬件。
与现有应用程序代码集成。
符合标准,例如AUTOSAR。
修改代码行为,例如启用或禁用非有限或内联支持。金宝app
特定于应用程序或项目的代码需求,例如:
消除
math.h
.消除系统头文件。
取消对
memcpy
或memset
.使用BLAS。
使用特定的BLAS。
要应用此技术,请配置代码生成器,使其在代码生成期间应用代码替换库(CRL)。默认情况下,代码生成器不应用代码替换库。您可以从MathWorks的库中选择®提供和您通过使用嵌入式编码器创建和注册®产品。可用库的列表取决于:
安装支持包。金宝app
系统目标文件、语言、标准数学库和设备供应商配置。
是否使用嵌入式编码器产品创建和注册了库。
包含GNU99扩展的库旨在与GCC编译器一起使用。如果将其中一个库与另一个编译器一起使用,生成的代码可能无法编译。
代码替换库
一个代码替换库由一个或多个代码替换表组成,这些表指定函数和操作符的特定于应用程序的实现。例如,特定嵌入式处理器的库指定了优化该处理器生成代码的函数和操作符替换。
一个代码替换表包含一个或多个代码替换条目,每个条目代表一个函数或运算符的潜在替换。每个条目映射一个概念上的表示函数的函数或运算符实现表示和优先级。
表项组件 | 描述 |
---|---|
概念上的表示 | 标识表项并包含代码生成器的匹配条件。包括:
|
实现表示 | 指定替换代码。包括:
|
优先级 | 定义相对于表中其他条目的条目优先级。取值范围为0 ~ 100,0为最高优先级。如果多个条目具有相同的优先级,代码生成器将使用具有该优先级的第一个匹配项。 |
代码生成器在代码替换库中查找匹配时,将创建并填充调用站点对象用函数或算子的概念表示。如果存在匹配,代码生成器将使用用实现表示形式填充的匹配的代码替换项,并使用它生成代码。
代码生成器按照表在库中出现的顺序在代码替换库中的表中搜索匹配项。如果代码生成器在一个表中发现多个匹配项,则优先级决定匹配项。代码生成器使用高优先级条目而不是具有较低优先级的类似条目。
代码替换术语
术语 | 定义 |
---|---|
缓存命中 | 在指定的代码替换库中定义的函数或运算符的代码替换项,代码生成器为其找到匹配项。 |
缓存错过 | 代码生成器找不到匹配的函数或运算符的概念表示。 |
调用站点对象 | 当代码生成器遇到函数或操作符的调用站点时使用的函数或操作符的概念表示。代码生成器使用对象查询代码替换库以获得概念表示匹配。如果存在匹配,代码生成器将返回一个代码替换对象,其中完全填充了概念表示、实现表示和优先级,并使用该对象生成替换代码。 |
代码替换库 | 一个或多个代码替换表,用于指定函数和操作符的特定于应用程序的实现。当配置为使用代码替换库时,代码生成器将使用库中定义的条件搜索匹配项。如果找到匹配,代码生成器将默认生成的代码替换为库中定义的特定于应用程序的代码。 |
代码替换表 | 一个或多个代码替换表项。提供一种方法,将相关或共享的条目分组,以便在不同的库中使用。 |
代码替换条目 | 表示函数或运算符的潜在替换。将函数或操作符的概念表示映射到实现表示和优先级。 |
概念上的参数 | 表示要替换的函数或运算符的输入或输出参数。概念参数遵守命名约定(“日元” ,‘u1’ ,“u2” ,…)和代码生成器熟悉的数据类型。 |
概念上的表示 | 表示代码生成器用于限定函数和操作符进行替换的匹配条件。包括:
|
实现参数 | 表示C或c++替换函数的输入或输出参数。实现参数遵循C/ c++名称和数据类型规范。 |
实现表示 | 指定C或c++替换函数原型。包括:
|
关键 | 标识要替换的函数或运算符。函数名或键出现在代码替换条目的概念表示中。的关键RTW_OP_ADD 标识加法运算符。 |
优先级 | 定义代码替换项相对于代码替换库中具有相同名称和概念参数列表的其他项的匹配优先级。优先级范围为0 ~ 100,其中0为最高优先级。默认值是100。如果一个标准库为一个函数或操作符提供了两个实现,优先级高的实现会遮蔽优先级低的实现。 |
代码替换限制
代码替换验证——代码替换的行为可能不同于您的预期。例如,在代码生成器输入中观察到的数据类型可能与代码生成器在操作期间作为中间数据类型使用的数据类型不匹配。通过检查生成的代码来验证代码替换。
矩阵的代码替换——代码替换库不支持动态和符号大小的矩阵。金宝app