通过使用多个代码替换库优化生成的代码
您可以生成由多个代码替换库启用的代码替换。您可以在统一的工作流中选择多个代码替换库,以便生成的代码包含来自不同代码替换库的优化,例如AUTOSAR 4.0
而且GNU C99扩展
.您还可以选择自己的自定义代码替换库以及嵌入式Coder®中包含的库,以进一步优化生成的代码。您可以选择和使用库的组合并实现所需的功能,而不需要创建单独的库。如果有多个自定义代码替换库,并且您需要所有这些库的功能,请单独选择这些库。
示例模型
这个例子展示了如何通过使用多个代码替换库替换包含Add块和Abs块的模型生成的代码。可以使用替换常规代码的代码替换自定义来替换Abs块晶圆厂
函数的自定义实现CRL_abs_d
从ScalarFcn
图书馆。将Add块替换为自定义实现CRL_d_add_d_d_cao
从ScalarOp
图书馆。
打开模型mMultiLibrary_abs
它有一个Add块和一个Abs块。
模型=“mMultiLibrary_abs”;open_system(模型);拷贝文件multipleFnRtwTargetInfo.txtrtwTargetInfo.m
MATLAB®定制文件hcrl_make_abs
而且hcrl_sum_float
已经被执行了。运行sl_refresh_customizations函数来注册库ScalarFcn
而且ScalarOp
.
sl_refresh_customizations;
选择代码替换库
打开“配置参数”对话框。
在“配置参数”对话框中设置正确的参数设备供应商而且设备类型取决于硬件目标。在这个例子中
英特尔
是设备供应商而且x86 - 64 (Windows64)
是设备类型.在接口窗格中,设置代码替换库参数。选择和将代码替换库添加到选定的代码替换库-优先级列表窗格中。本例中选择ScalarFcn和ScalarOp。这些库在Windows®平台上工作。Linux®用户必须提供不同的库。
根据您希望在生成的代码中看到它们被替换的优先级对代码替换库进行排序。在代码替换期间,位于顺序顶部的代码替换库具有更高的优先级。
或者,使用命令行API来启用代码替换:
set_param (“mMultiLibrary_abs”,“CodeReplacementLibrary”,“ScalarFcn, ScalarOp”)
为模型生成代码。
evalc (“slbuild(模型));
注意:注册代码替换库时,不能在代码替换库名称中使用逗号。
查看生成的替换代码。这是一部分mMultiLibrary_abs.c
.
Cfile = fullfile(“mMultiLibrary_abs_ert_rtw”,“mMultiLibrary_abs.c”);rtwdemodbtype(用'/*模型阶跃函数',/*模型初始化函数, 1, 1);
/*模型步长函数*/ void mMultiLibrary_abs_step(void) {int32_T i;/* Outport: '<根>/Out1'合并:* Abs: '<根>/Abs1' * Inport: '<根>/In1' */ mMultiLibrary_abs_Y。Out1 = CRL_abs_d(mMultiLibrary_abs_U.In1);/* Outport: '<根>/Output'合并:* Inport: '<根>/In2' * Inport: '<根>/In3' * Sum: '<根>/Add' */ for (i = 0;I < 2500;i++) {mMultiLibrary_abs_Y。输出[i] = CRL_d_add_d_d_cao(mMultiLibrary_abs_U。In2[我],mMultiLibrary_abs_U.In3[我]);} /* End of Outport: '/Output' */}
生成的代码包含CRL_abs_d
由自定义代码替换库启用的函数ScalarFcn
.注意,这个库只适用于Windows。该代码还包含该函数CRL_d_add_d_d_cao
使能ScalarOp
代码替换库。选择多个代码替换库可以在生成的代码中进行多种优化。
关闭模型和代码生成报告。
删除。/ rtwTargetInfo.mbdclose rtwdemoclean(模型);
限制:
当您使用不同的参数类型(如矩阵和标量)时,优先级顺序将被忽略。矩阵代码替换库的优先级高于标量代码替换库,而与代码替换库指定的顺序无关。
当代码替换库参数指定标准数学库(例如通过其BaseTfl)时,它不匹配标准数学图书馆参数指定的库标准数学图书馆参数。