主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

使用多个代码替换库优化生成的代码

您可以生成由多个代码替换库启用代码替换的代码。您可以在统一的工作流程中选择多个代码替换库,以便生成的代码包含来自各种代码替换库(例如 AUTOSAR 4.xGNU C99 extensions)的优化。您还可以选择自己的自定义代码替换库以及 Embedded Coder® 附带的库来进一步优化生成的代码。您可以选择并使用库的组合并实现所需的函数,而无需编写单独的库。如果存在多个自定义代码替换库并且您需要所有库的函数,请单独选择这些库。

示例模型

此示例显示如何使用多个代码替换库替换包含 Add 模块和 Abs 模块的模型的生成代码。您可以使用代码替换自定义来替换 Abs 模块,该自定义用 ScalarFcn 库中的自定义实现 CRL_abs_d 替换常规 fabs 函数。您使用 ScalarOp 库中的自定义实现 CRL_d_add_d_d_cao 替换 Add 模块。

打开具有 Add 模块和 Abs 模块的模型 mMultiLibrary_abs

model = 'mMultiLibrary_abs';
open_system(model);

copyfile multipleFnRtwTargetInfo.txt rtwTargetInfo.m

MATLAB® 自定义文件 hcrl_make_abshcrl_sum_float 已经执行。运行 sl_refresh_customizations 函数来注册库 ScalarFcnScalarOp

sl_refresh_customizations;

选择代码替换库

  1. 打开配置参数对话框。

  2. 在配置参数对话框中,根据硬件目标设置正确的设备供应商设备类型。在这个示例中,Intel设备供应商x86-64(Windows64)设备类型

  3. 界面窗格中,通过点击选择并将代码替换库添加到选定的代码替换库 - 优先列表窗格中来设置代码替换库参数。对于此示例,选择 ScalarFcn 和 ScalarOp。这些库可以在 Windows® 平台上运行。Linux® 用户必须提供不同的库。

  4. 根据您希望在生成的代码中替换代码替换库的优先级对其进行排序。顺序顶部的代码替换库在代码替换时具有更高的优先级。

或者,使用命令行 API 来启用代码替换:

set_param('mMultiLibrary_abs','CodeReplacementLibrary','ScalarFcn,ScalarOp')

为模型生成代码。

evalc('slbuild(model)');

注意:注册代码替换库时,代码替换库名称中不能使用逗号。

查看生成的带有替换的代码。这是 mMultiLibrary_abs.c 的一部分。

cfile = fullfile('mMultiLibrary_abs_ert_rtw','mMultiLibrary_abs.c');
coder.example.extractLines(cfile,'/* Model step function ','/* Model initialize function',1, 1);
/* Model step function */
void mMultiLibrary_abs_step(void)
{
  int32_T i;

  /* Outport: '<Root>/Out1' incorporates:
   *  Abs: '<Root>/Abs1'
   *  Inport: '<Root>/In1'
   */
  mMultiLibrary_abs_Y.Out1 = CRL_abs_d(mMultiLibrary_abs_U.In1);

  /* Outport: '<Root>/Output' incorporates:
   *  Inport: '<Root>/In2'
   *  Inport: '<Root>/In3'
   *  Sum: '<Root>/Add'
   */
  for (i = 0; i < 2500; i++) {
    mMultiLibrary_abs_Y.Output[i] = CRL_d_add_d_d_cao(mMultiLibrary_abs_U.In2[i],
      mMultiLibrary_abs_U.In3[i]);
  }

  /* End of Outport: '<Root>/Output' */
}

生成的代码包含自定义代码替换库 ScalarFcn 启用的 CRL_abs_d 函数。请注意,该库仅适用于 Windows。代码中还包含 ScalarOp 代码替换库启用的 CRL_d_add_d_d_cao 函数。选择多个代码替换库可以对生成的代码进行多项优化。

关闭模型和代码生成报告。

delete ./rtwTargetInfo.m
bdclose(model)

限制:

  • 当您使用不同的参量类型(例如矩阵和标量)时,优先级顺序将被忽略。矩阵代码替换库的优先级高于标量代码替换库,无论代码替换库指定的顺序如何。

  • 当代码替换库参数指定语言标准(例如通过其 BaseTfl)并且它与语言标准参数不匹配时,将使用语言标准参数指定的库。

另请参阅

主题