快速向导代码替换库开发 - Simulink
此示例说明如何开发一个代码替换库,在其中包含用来为数学函数 sin
生成替换代码的入口函数。您需要使用代码替换工具。
前提条件
要完成此示例,请安装以下软件:
MATLAB®
MATLAB Coder™
Simulink®
Simulink Coder™
Embedded Coder®
Compiler
有关安装 MathWorks® 产品的说明,请参阅 MATLAB 安装文档。如果您已安装 MATLAB 并想查看还安装了哪些其他 MathWorks 产品,请在命令行窗口中输入 ver
。
有关支持的编译器的列表,请参阅 https://www.mathworks.com/support/compilers/current_release/
。
打开代码替换工具
1.启动一个 MATLAB 会话。
2.创建或浏览 (cd
) 到一个空文件夹。
3.在命令提示符下,输入 crtool
命令。Code Replacement Tool 窗口将打开。
创建代码替换表
1.在 Code Replacement Tool 窗口中,选择文件 > 新建表。
2.在右侧窗格中,将表命名为 crl_table_sinfcn
并点击应用。保存表时,工具将使用文件名 crl_table_sinfcn.m
保存它。
创建表条目
创建一个表条目,将具有 double
输入和 double
输出的 sin
函数映射到一个自定义实现函数。
1.在左侧窗格中,选择表 crl_table_sinfcn
。然后,选择文件 > 新建条目 > 函数。条目显示在中间窗格中,最初没有名称。
2.在中间窗格中,选择新条目。
3.在右侧窗格中的映射信息选项卡上,从函数菜单中选择 sin
。
4.保留算法设置为 Unspecified
,并保留概念函数组中的参数设置为默认值。
5.在替换函数组中,将替换函数命名为 sin_dbl
。
6.保留替换函数组中的其余参数设置为默认值。
7.点击应用。工具会更新函数签名预览以反映指定的替换函数名称。
8.滚动到映射信息选项卡的底部,然后点击验证条目。工具会验证您的条目。
下图显示完成的映射信息。
指定替换代码的编译信息
1.在编译信息选项卡上,对于实现头文件参数,输入 sin_dbl.h
。
2.保留其余参数设置为默认值。
3.点击应用。
4.您也可以重新验证条目。返回映射信息选项卡,然后点击验证条目。
创建另一个表条目
创建一个条目,将具有 single
输入和 double
输出的 sin
函数映射到名为 sin_sgl
的自定义实现函数。通过复制和粘贴 sin_dbl
条目创建该条目。
1.在中间窗格中,选择 sin_dbl
条目。
2.选择编辑 > 复制。
3.选择编辑 > 粘贴。
4.在映射信息选项卡上的概念函数部分,将输入参量 u1
的数据类型设置为 single
。
5.在替换函数部分中,将函数命名为 sin_sgl
。将输入参量 u1
的数据类型设置为 single
。
6.点击应用。请注意所显示的关于函数签名预览的更改。
7.在编译信息选项卡上,对于实现头文件参数,输入 sin_sgl.h
。将其余参数设置为默认值,然后点击应用。
验证代码替换表
1.选择操作 > 验证表。
2.如果工具报告错误,则修复它们并重新运行验证。反复修复和验证错误,直到工具不再报错为止。下图显示了验证报告。
保存代码替换表
将代码替换表保存到工作文件夹中的 MATLAB 文件。选择文件 > 保存表。默认情况下,工具使用表名称来命名文件。对于此示例,工具将表保存在文件 crl_table_sinfcn.m
中。
查看代码替换表定义
以查看代码替换表定义的 MATLAB 代码为例。使用工具创建表定义文件的初始版本后,您可以在文本编辑器中更新、增强或复制文件。
要查看它,请在 MATLAB 或其他文本编辑器中,打开文件 crl_table_sinfcn.m
。
生成注册文件
您必须将代码替换表注册为代码替换库的一部分,才能使用它。使用代码替换工具生成注册文件。
1.在代码替换工具中,选择文件 > 生成注册文件。
2.在生成注册文件对话框中,编辑对话框字段以匹配下图,然后点击确定。
3.在选择保存注册文件的位置对话框中,指定注册文件的位置。该位置必须位于 MATLAB 路径上或当前工作文件夹中。保存文件。工具将文件另存为 rtwTargetInfo.m
。
注册代码替换表
在命令提示符下,输入:
RTW.TargetRegistry.getInstance('reset');
查看和测试代码替换
应用您的代码替换库。验证代码生成器是否能按照您的预期执行代码替换。
1.检查错误。在命令行中,调用表定义文件。例如:
tbl = crl_table_sinfcn
tbl =
TflTable with properties:
Version: '1.0' ReservedSymbols: [] StringResolutionMap: [] AllEntries: [2x1 RTW.TflCFunctionEntry] EnableTrace: 1|
如果定义文件中存在错误,则调用会触发消息。修复错误,然后重试。
2.使用 Code Replacement Viewer 来检查代码替换条目。例如:
crviewer('Sin Function Example')
在查看器中,选择表中的条目,并验证内容是否符合您的期望。查看器可以帮助您检测问题,例如:
参量顺序不正确。
概念参量名称与代码生成器的预期不匹配。
优先级设置不正确。
3.确定现有模型,或创建一个包含 Trigonometric 模块且该模块被设置为 sin
函数的模型。例如:
4.打开模型并将其配置为使用 Embedded Coder(基于 ERT)目标进行代码生成。
5.查看您的库是否被列为代码生成 > 接口 > 代码替换库模型配置参数的一个可用选项。如果已列出,请选择它。
如果未列出,请打开注册文件 rtwTargetInfo.m
。查看在创建文件时是否输入了正确的代码替换表名称。如果将光标悬停在所选库上,将显示工具提示。此提示包含从代码替换库注册文件派生的信息,例如库描述及其中包含的表的列表。
6.要快速查找参数,请在“配置参数”对话框的搜索字段中键入参数名称。通过选择以下参数来配置用于代码替换分析的代码生成报告:
创建代码生成报告
自动打开报告
代码到模型
模型到代码
摘要显示哪些模块触发了代码替换
包括注释
Simulink 模块注释
Simulink 模块描述
7.将模型配置为仅生成代码。在编译可执行程序之前,请确认代码生成器能够按预期替换代码。
8.为模型生成代码。
9.在代码生成报告的代码替换报告部分中查看代码替换结果。
该报告指示代码生成器找到一个匹配项并应用了函数 sin_dbl
的替换代码。
10.查看代码替换。在模型窗口中,右键点击 Trigonometric Function 模块。选择 C/C++ 代码 > 导航至 C/C++ 代码。代码生成报告将打开,并突出显示 my_sin_func.c
中的代码替换。在本例中,代码生成器用 sin_dbl
替换了 sin
。