主要内容

什么是代码替换?

代码替换是指更改代码生成器为函数和运算符生成的代码以满足应用程序代码要求的一种方法。例如,您可以替换生成的代码以满足以下要求:

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

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

  • 符合某种标准,例如 AUTOSAR。

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

  • 特定于应用程序或工程的代码要求,例如:

    • 消除 math.h

    • 消除系统头文件。

    • 消除对 memcpymemset 的调用。

    • 使用 BLAS。

    • 使用特定的 BLAS。

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

  • 已安装的支持包。

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

  • 您是否使用 Embedded Coder 产品创建并注册了库。

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

代码替换库

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

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

Diagram showing a code replacement library containing code replacement tables which contain entries.

表条目组成部分描述
概念表示

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

  • 函数名称或。函数名称标识大多数函数。对于运算符和某些函数来说,使用称为键的一系列字符来标识函数或运算符。例如,函数名称 'cos' 和运算符键 'RTW_OP_ADD'

  • 概念参量,表示将被替换的函数或运算符的输入或输出参量。遵守代码生成器命名的概念参量('y1''u1''u2'...),具有对应的 I/O 类型(输出或输入)和数据类型。

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

实现表示

指定替换代码。包括:

  • 函数名称。例如,'cos_dbl''u8_add_u8_u8'

  • 实现参量,表示 C 或 C++ 替换函数的输入或输出参量。实现参量遵循与对应 I/O 类型(输出或输入)和数据类型匹配的 C/C++ 名称和数据类型设定。

  • 提供附加实现细节的参数,如头文件和源文件名以及编译资源的路径。

优先级

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

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

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

代码替换限制

代码替换验证 - 代码替换的行为可能与您预期的不同。例如,Simulink® 模块的中间数据类型可能与实现代码使用的中间数据类型不匹配,即使输入和输出数据类型与实现代码匹配也是如此。此外,替换代码的实现细节可能导致出现差异,因为实现可能与 Simulink 用于仿真的逻辑不同。这可能导致仿真和生成代码行为之间的不匹配。请通过检查生成代码来验证代码替换,并在仿真和生成代码行为之间出现潜在不匹配时检查实现以申述差异。

矩阵的代码替换 - 代码替换库不支持动态和符号大小的矩阵。

另请参阅

主题