在命令行生成单精度C代码
这个例子展示了如何从双精度的MATLAB中生成单精度的C代码®命令行上的代码。
先决条件
要完成此示例,请安装以下产品:2022世界杯八强谁会赢?
创建一个文件夹并复制相关文件
创建一个本地工作文件夹,例如,
c: \ ex_2ndOrder_filter
.更改为
docroot \工具箱\ fixpoint \例子
文件夹中。在MATLAB命令行中,输入:Cd (fullfile(docroot, 'toolbox', 'fixpoint', 'examples'))
复制
ex_2ndOrder_filter.m
而且ex_2ndOrder_filter_test.m
文件到您的本地工作文件夹。类型 的名字 描述 函数代码 ex_2ndOrder_filter.m
入口点MATLAB函数 测试文件 ex_2ndOrder_filter_test.m
测试的MATLAB脚本
ex_2ndOrder_filter.m
确定输入参数的类型
来确定输入参数的类型x
,使用coder.getArgTypes
运行测试文件ex_2ndOrder_filter_test.m
types = code . getargetypes (“ex_2ndOrder_filter_test”,“ex_2ndOrder_filter”);
测试文件运行并显示每个输入信号的过滤器的输出。coder.getArgTypes
的输入类型x
是1x256倍的。
生成并运行单精度MEX来验证数值行为
在生成单精度C代码之前,生成一个单精度MEX函数,您可以使用它来验证生成的单精度代码的行为。若要指示您需要单精度MEX代码,请使用
-singleC
选择。codegen-singleCex_2ndOrder_filterarg游戏类型报告
在MEX生成期间,代码生成器检测单精度转换问题。在生成C/ c++代码之前,请修复这些问题。此示例不存在单精度转换问题。
生成的MEX接受单精度和双精度输入。您可以使用相同的测试文件来运行双精度的MATLAB函数和单精度的MEX函数。您不必修改测试文件来调用单精度MEX函数。
运行测试文件
ex_2ndOrder_filter_test.m
.该文件调用双精度MATLAB函数ex_2ndOrder_filter.m
.ex_2ndOrder_filter_test
测试文件运行并显示每个输入信号的过滤器的输出。
运行测试文件
ex_2ndOrder_filter_test
,替换对双精度的调用ex_2ndOrder_filter
函数调用单精度ex_2ndOrder_filter_mex
函数。coder.runTest (“ex_2ndOrder_filter_test”,“ex_2ndOrder_filter”)
测试文件运行并显示每个输入信号的过滤器的输出。单精度的MEX函数产生的结果与双精度的MATLAB函数相同。
生成单精度C代码
为生成C静态库、动态库或可执行文件创建一个代码配置对象。
CFG = code .config(“自由”);
要生成单精度的C代码,调用
codegen
与-singleC
选择。启用代码生成报告的生成。codegen配置cfg-singleCex_2ndOrder_filterarg游戏{类型{1}}报告
查看生成的单精度C代码
要查看C代码生成的代码生成报告,请单击查看报告链接。
在生成的代码窗格中,单击ex_2ndOrder_filter.c
.
双精度变量有类型
浮动
在C代码中。该指数
我
为整数。
查看潜在的数据类型问题
当你生成单精度代码时,codegen
支持突出显示代码生成报告中潜在的数据类型问题。如果codegen
不能删除双精度运算,报告强调了导致该运算的MATLAB表达式。
单击代码的见解选项卡。扩大潜在的数据类型问题.没有双精度运算表示没有双精度运算。
另请参阅
codegen
|coder.config
|coder.getArgTypes
|coder.runTest