快速向导代码替换库开发 - Simulink
此示例说明如何开发一个代码替换库,在其中包含用来为数学函数 sin
生成替换代码的入口函数。您需要使用 Code Replacement Tool。
前提条件
要完成此示例,请安装以下软件:
MATLAB®
MATLAB Coder™
Simulink®
Simulink Coder™
Embedded Coder®
Compiler
有关安装 MathWorks® 产品的说明,请参阅 MATLAB 安装文档。如果您已安装 MATLAB 并想查看还安装了哪些其他 MathWorks 产品,请在命令行窗口中输入 ver
。
有关支持的编译器的列表,请参阅 https://www.mathworks.com/support/compilers/current_release/
。
打开 Code Replacement Tool
1.启动一个 MATLAB 会话。
2.创建或浏览 (cd
) 到一个空文件夹。
3.在命令提示符下,输入 crtool
命令。Code Replacement Tool 窗口将打开。
创建代码替换表
1.在 Code Replacement Tool 窗口中,选择 File > New table。
2.在右侧窗格中,将表命名为 crl_table_sinfcn
并点击 Apply。保存表时,工具将使用文件名 crl_table_sinfcn.m
保存它。
创建表条目
创建一个表条目,将具有 double
输入和 double
输出的 sin
函数映射到一个自定义实现函数。
1.在左侧窗格中,选择表 crl_table_sinfcn
。然后,选择 File > New entry > Function。条目显示在中间窗格中,最初没有名称。
2.在中间窗格中,选择新条目。
3.在右侧窗格中的 Mapping Information 选项卡上,从 Function 菜单中选择 sin
。
4.保留 Algorithm 设置为 Unspecified
,并保留 Conceptual function 组中的参数设置为默认值。
5.在 Replacement function 组中,将替换函数命名为 sin_dbl
。
6.保留 Replacement function 组中的其余参数设置为默认值。
7.点击应用。工具会更新 Function signature preview 以反映指定的替换函数名称。
8.滚动到 Mapping Information 选项卡的底部,然后点击 Validate entry。工具会验证您的条目。
下图显示完成的映射信息。
指定替换代码的编译信息
1.在 Build Information 选项卡上,对于 Implementation header file 参数,输入 sin_dbl.h
。
2.保留其余参数设置为默认值。
3.点击应用。
4.您也可以重新验证条目。返回 Mapping Information 选项卡,然后点击 Validate entry。
创建另一个表条目
创建一个条目,将具有 single
输入和 double
输出的 sin
函数映射到名为 sin_sgl
的自定义实现函数。通过复制和粘贴 sin_dbl
条目创建该条目。
1.在中间窗格中,选择 sin_dbl
条目。
2.选择 Edit > Copy。
3.选择 Edit > Paste。
4.在 Mapping Information 选项卡上的 Conceptual function 部分,将输入参数 u1
的数据类型设置为 single
。
5.在 Replacement function 部分中,将函数命名为 sin_sgl
。将输入参数 u1
的数据类型设置为 single
。
6.点击应用。请注意所显示的关于 Function signature preview 的更改。
7.在 Build Information 选项卡上,对于 Implementation header file 参数,输入 sin_sgl.h
。将其余参数设置为默认值,然后点击 Apply。
验证代码替换表
1.选择 Actions > Validate table。
2.如果工具报告错误,则修复它们并重新运行验证。反复修复和验证错误,直到工具不再报错为止。下图显示了验证报告。
保存代码替换表
将代码替换表保存到工作文件夹中的 MATLAB 文件。选择 File > Save table。默认情况下,工具使用表名称来命名文件。对于此示例,工具将表保存在文件 crl_table_sinfcn.m
中。
查看代码替换表定义
以查看代码替换表定义的 MATLAB 代码为例。使用工具创建表定义文件的初始版本后,您可以在文本编辑器中更新、增强或复制文件。
要查看它,请在 MATLAB 或其他文本编辑器中,打开文件 crl_table_sinfcn.m
。
生成注册文件
您必须将代码替换表注册为代码替换库的一部分,才能使用它。使用 Code Replacement Tool 生成注册文件。
1.在 Code Replacement Tool 中,选择 File > Generate registration file。
2.在 Generate registration file 对话框中,编辑对话框字段以匹配下图,然后点击 OK。
3.在 Select location to save the registration file 对话框中,指定注册文件的位置。该位置必须位于 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.查看您的库是否被列为 Code Generation > Interface > Code replacement library 模型配置参数的一个可用选项。如果已列出,请选择它。
如果未列出,请打开注册文件 rtwTargetInfo.m
。查看在创建文件时是否输入了正确的代码替换表名称。如果将光标悬停在所选库上,将显示工具提示。此提示包含从代码替换库注册文件派生的信息,例如库描述及其中包含的表的列表。
6.要快速查找参数,请在 Configuration Parameters 对话框的 Search 字段中键入参数名称。通过选择以下参数来配置用于代码替换分析的代码生成报告:
Create code generation report
Open report automatically
Code-to-model
Model-to-code
Summarize which blocks triggered code replacements
Include comments
Simulink block comments
Simulink block descriptions
7.将模型配置为仅生成代码。在编译可执行程序之前,请确认代码生成器能够按预期替换代码。
8.为模型生成代码。
9.在代码生成报告的 Code Replacement Report 部分中查看代码替换结果。
该报告指示代码生成器找到一个匹配项并应用了函数 sin_dbl
的替换代码。
10.查看代码替换。在模型窗口中,右键点击 Trigonometric Function 模块。选择 C/C++ Code > Navigate to C/C++ Code。代码生成报告将打开,并突出显示 my_sin_func.c
中的代码替换。在本例中,代码生成器用 sin_dbl
替换了 sin
。