在生成的代码找到潜在的数据类型问题
数据类型问题概述
当你从MATLAB生成C代码®代码,你可以强调潜在的数据类型问题的C代码生成报告。报告强调了MATLAB代码,需要单精度,双精度,或昂贵的定点操作。昂贵的定点操作检查需要定点设计师™。
双精度检查突出表达,导致双精度运算。当试图实现strict-single或定点设计、手工检查的代码可以耗时且容易出错。
strict-single精密设计,指定一个语言标准,支持单精度的实现。金宝app改变项目的库,生成代码的步骤期间,在“项目设置”对话框中自定义代码选项卡,设置语言标准来
C99 (ISO)
。单精度检查突出表达,导致单个操作。
昂贵的定点操作检查确定为定点代码优化的机会。它突出表情在MATLAB代码需要繁琐的乘法或除法,昂贵的舍入,昂贵的比较,或多字操作。优化生成的定点代码的更多信息,请参阅小贴士让生成的代码更高效(定点设计师)。
启用高亮显示潜在的数据类型问题
使突出的选择使用MATLAB编码器应用程序
在生成代码页面,打开生成对话框中,单击生成箭头。
集构建类型下列之一:
源代码
静态库(lib)
动态库文件(. dll)中
可执行文件(. exe)
点击更多的设置。
在调试选项卡中,选择总是创建一个报告和强调潜在的数据类型问题复选框。
使用命令行界面启用高亮选项
创建一个嵌入式代码配置对象
“自由”
,“dll”
,或exe”
:cfg = coder.config (“自由”,“是”,真正的);%或exe或dll
设置
GenerateReport
和HighlightPotentialDataTypeIssues
配置对象属性真正的
:cfg。GenerateReport = true;cfg。HighlightPotentialDataTypeIssues = true;
找到并解决繁琐的操作
繁琐的操作通常发生由于不足的输出范围。避免乘法或除法操作,输入单词长度大于基整数类型的处理器。软件可以处理业务更大的单词长度,但是这种方法需要更多的代码,运行慢。
这个例子需要嵌入式编码器®和定点设计师。处理器的目标字长在这个例子中是64。
创建函数
myMul
。函数= myMul (in1, in2) = fi (in1 * in2, 64,0);结束
生成的代码
myMul
。cfg = coder.config (“自由”);cfg。GenerateReport = true;cfg。HighlightPotentialDataTypeIssues = true;调频= fimath (“ProductMode”,“SpecifyPrecision”,“ProductWordLength”,64);codegen配置cfgmyMularg游戏64年{fi (1, - 1, 4, fm), fi (1, 1, 64, 4、fm)}
点击查看报告。
在代码生成报告,单击代码的见解选项卡。
扩大潜在的数据类型问题部分。然后,扩大昂贵的定点操作部分。
报告旗帜表达式
in1 * in2
。为了解决这个问题,修改的数据类型三机一体
和in2
这产品的单词长度不超过64年的目标单词长度。
找到并解决昂贵的舍入
传统的手写代码,特别是对于控制应用程序,几乎总是使用“不努力”舍入。例如,对于无符号整数和二进制补码签署了整数,将权利和位相当于四舍五入丢在地板上。得到结果与、或比你期望从传统的手写代码,使用地板上
舍入方法。
这个例子需要嵌入式编码器和定点设计师。
创建函数
myRounding
。函数[“]= myRounding (in1, in2)”= in1 / in2;结束
生成的代码
myRounding
。cfg = coder.config (“自由”);cfg。GenerateReport = true;cfg。HighlightPotentialDataTypeIssues = true;codegen配置cfgmyRoundingarg游戏{fi(1, 1, 16日2),fi(1, - 1, 16岁,4)}
点击查看报告。
在代码生成报告,单击代码的见解选项卡。
扩大潜在的数据类型问题部分。然后,扩大昂贵的定点操作部分。
部门操作
in1 / in2
使用默认的舍入方法,最近的
。改变了舍入方法地板上
提供了一个更高效的实现。
找到并解决昂贵的比较操作
比较操作生成额外的代码当铸造操作需要做比较。例如,比较前一个无符号整数带符号整数,输入必须投之一signedness。考虑优化的数据类型的输入参数,不需要在生成的代码。
这个例子需要嵌入式编码器和定点设计师。
创建函数
myRelop
。函数= myRelop (in1, in2) = in1 > in2;结束
生成的代码
myRelop
。cfg = coder.config (“自由”);cfg。GenerateReport = true;cfg。HighlightPotentialDataTypeIssues = true;codegen配置cfgmyReloparg游戏{fi(1, 1, 14日,- 3,- 1),fi (14 1 0 3 1)}
点击查看报告。
在代码生成报告,单击代码的见解选项卡。
扩大潜在的数据类型问题部分。然后,扩大昂贵的定点操作部分。
第一个输入参数,
三机一体
,签署in2
是无符号的。额外的代码生成,因为演员必须发生在两个输入之前可以相比。改变signedness和扩展的输入生成更高效的代码。
找到并解决多字操作
多字操作可以在硬件效率低下。当一个操作有一个输入或输出数据类型大于最大的字大小的处理器,生成的代码包含多字操作。你可以避免多字操作生成的代码通过指定地方fimath
属性变量。您也可以手动指定输入和输出单词长度的操作生成多字代码。
这个例子需要嵌入式编码器和定点设计师。在这个例子中,目标词的长度是64。
创建函数
myMul
。函数= myMul (in1, in2) = in1 * in2;结束
生成的代码
myMul
。cfg = coder.config (“自由”);cfg。GenerateReport = true;cfg。HighlightPotentialDataTypeIssues = true;codegen配置cfgmyMularg游戏{fi(1, 1, 33岁,4),fi(1, - 1, 32岁,4)}
点击查看报告。
在代码生成报告,单击代码的见解选项卡。
扩大潜在的数据类型问题部分。然后,扩大昂贵的定点操作部分。
报告的旗帜
in1 * in2
2号线的操作myMul
。在代码中窗格中,暂停结束
三机一体
,in2
,表达in1 * in2
。你会看到:这个词的长度
三机一体
33位的字长吗in2
是32位的。单词长度的表达式
in1 * in2
是65位。
软件检测到一个65多字的操作,因为单词长度大于64年的目标单词长度。
为了解决这个问题,修改的数据类型
三机一体
和in2
这产品的单词长度不超过目标单词长度。另外,指定ProductMode
房地产的地方fimath
(定点设计师)对象。