控制 C 代码的样式
关于本教程
学习目标
本教程将向您说明如何:
以
switch-case
语句的形式为if-elseif-else
决策逻辑生成代码。使用 MATLAB® Coder™ App 从 MATLAB 代码中生成 C 代码。
在 MATLAB Coder 工程中配置代码生成配置参数。
创建代码生成报告,您可以使用该报告在原始 MATLAB 代码和生成的 C 代码之间进行追溯。
需要的产品
本教程需要以下产品:
需要的文件
类型 | 名称 | 描述 |
---|---|---|
函数代码 | test_code_style.m | 使用 if-elseif-else 的 MATLAB 示例。 |
将文件复制到本地工作文件夹中
创建一个本地工作文件夹,例如
c:\ecoder\work
。转到
matlabroot\help\toolbox\ecoder\examples
文件夹。在 MATLAB 命令提示符下,输入:cd(fullfile(docroot, 'toolbox', 'ecoder', 'examples'))
将文件
test_code_style.m
复制到本地工作文件夹中。
打开 MATLAB Coder
在 MATLAB 工具条的 App 选项卡上,点击 Code Generation 下的 MATLAB Coder 图标。
该 App 会打开 Select Source Files 页面。
指定源文件
在 Select Source Files 页面中,键入或选择入口函数
test_code_style.m
的名称。在 Project location 字段中,将工程名称更改为
code_style.prj
。点击 Next 以转到 Define Input Types 步骤。该 App 将分析函数以查找编码问题并确定代码生成就绪情况。如果 App 发现问题,它将打开 Review Code Generation Readiness 页面,您可以在其中查看和解决问题。在此示例中,由于 App 没有检测到问题,因此将打开 Define Input Types 页面。
定义输入类型
由于 C 代码使用静态类型,因此在编译时,代码生成器必须确定 MATLAB 文件中所有变量的属性。因此,您必须指定所有函数输入的属性。要定义输入 x
的属性,请执行以下操作:
点击 Let me enter input or global types directly。
点击
x
右侧的字段。从选项列表中选择 “
int16
”,然后选择 “scalar
”。点击 Next 以转到 Check for Run-Time Issues 步骤。
注意
Convert if-elseif-else patterns to switch-case statements 优化仅对整数和枚举类型的输入有效。
检查运行时问题
Check for Run-Time Issues 步骤从您的入口函数生成 MEX 文件,然后运行 MEX 函数并报告问题。此步骤是可选的。不过,建议最好执行此步骤。通过此步骤,可以检测并解决在生成的 C 代码中更难诊断出来的运行时错误。默认情况下,MEX 函数包括内存完整性检查。这些检查执行数组边界和维度检查,还检测为 MATLAB 函数生成的代码中是否存在内存完整性冲突问题。有关详细信息,请参阅Control Run-Time Checks。
要打开 Check for Run-Time Issues 对话框,请点击 Check for Issues 箭头
。
在 Check for Run-Time Issues 对话框中,输入使用示例输入调用
test_code_style
的代码。对于此示例,输入test_code_style(int16(4))
。点击 Check for Issues。
App 将生成一个 MEX 函数。它将运行带示例输入的 MEX 函数。如果 App 在 MEX 函数生成或执行过程中检测到问题,它将提供警告和错误消息。您可以点击这些消息,导航到有问题的代码并修复问题。在本示例中,App 未检测到问题。
点击 Next 以转到 Generate Code 步骤。
配置代码生成参数
要打开 Generate 对话框,请点击 Generate 箭头
。
将 Build type 设置为 “
Static Library (.lib)
”。点击 More settings 并设置以下设置:
在 Code Appearance 选项卡上,选中 Convert if-elseif-else patterns to switch-case statements 复选框。
在 Debugging 选项卡上,确保已选择 Always create a report。
在 All Settings 选项卡上,确保已选择 Enable code traceability。
生成 C 代码
点击 Generate。
完成代码生成之后,代码生成器会在 /codegen/lib/test_code_style
子文件夹中生成 C 静态库 test_code_style.lib
和 C 代码。代码生成器提供指向报告的链接。
查看生成的代码
要打开代码生成报告,请点击 View Report 链接。
代码窗格中显示
test_code_style
函数。要对照查看 MATLAB 代码和 C 代码,请点击 Trace Code。
在 MATLAB 代码中,将光标放在语句
if (x == 1)
上。该报告将
if (x == 1)
追溯到switch
语句。
完成工作流
点击 Next 打开 Finish Workflow 页面。
Finish Workflow 页面指示已成功生成代码,还提供工程摘要以及指向生成的输出的链接。
要牢记的关键点
要在生成代码之前检查运行时问题,请执行 Check for Run-Time Issues 步骤。
要访问编译配置设置,请在 Generate Code 页面上打开 Generate 对话框,然后点击 More Settings。