主要内容

在生成的代码找到潜在的数据类型问题

数据类型问题概述

当你从MATLAB生成C代码®代码,你可以强调潜在的数据类型问题的C代码生成报告。报告强调了MATLAB代码,需要单精度,双精度,或昂贵的定点操作。昂贵的定点操作检查需要定点设计师™。

  • 双精度检查突出表达,导致双精度运算。当试图实现strict-single或定点设计、手工检查的代码可以耗时且容易出错。

    strict-single精密设计,指定一个语言标准,支持单精度的实现。金宝app改变项目的库,生成代码的步骤期间,在“项目设置”对话框中自定义代码选项卡,设置语言标准C99 (ISO)

  • 单精度检查突出表达,导致单个操作。

  • 昂贵的定点操作检查确定为定点代码优化的机会。它突出表情在MATLAB代码需要繁琐的乘法或除法,昂贵的舍入,昂贵的比较,或多字操作。优化生成的定点代码的更多信息,请参阅小贴士让生成的代码更高效(定点设计师)

启用高亮显示潜在的数据类型问题

使突出的选择使用MATLAB编码器应用程序

  1. 生成代码页面,打开生成对话框中,单击生成箭头

  2. 构建类型下列之一:

    • 源代码

    • 静态库(lib)

    • 动态库文件(. dll)中

    • 可执行文件(. exe)

  3. 点击更多的设置

  4. 调试选项卡中,选择总是创建一个报告强调潜在的数据类型问题复选框。

使用命令行界面启用高亮选项

  1. 创建一个嵌入式代码配置对象“自由”,“dll”,或exe”:

    cfg = coder.config (“自由”,“是”,真正的);%或exe或dll

  2. 设置GenerateReportHighlightPotentialDataTypeIssues配置对象属性真正的:

    cfg。GenerateReport = true;cfg。HighlightPotentialDataTypeIssues = true;

找到并解决繁琐的操作

繁琐的操作通常发生由于不足的输出范围。避免乘法或除法操作,输入单词长度大于基整数类型的处理器。软件可以处理业务更大的单词长度,但是这种方法需要更多的代码,运行慢。

这个例子需要嵌入式编码器®和定点设计师。处理器的目标字长在这个例子中是64。

  1. 创建函数myMul

    函数= myMul (in1, in2) = fi (in1 * in2, 64,0);结束

  2. 生成的代码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)}

  3. 点击查看报告

  4. 在代码生成报告,单击代码的见解选项卡。

  5. 扩大潜在的数据类型问题部分。然后,扩大昂贵的定点操作部分。

    报告旗帜表达式in1 * in2。为了解决这个问题,修改的数据类型三机一体in2这产品的单词长度不超过64年的目标单词长度。

找到并解决昂贵的舍入

传统的手写代码,特别是对于控制应用程序,几乎总是使用“不努力”舍入。例如,对于无符号整数和二进制补码签署了整数,将权利和位相当于四舍五入丢在地板上。得到结果与、或比你期望从传统的手写代码,使用地板上舍入方法。

这个例子需要嵌入式编码器和定点设计师。

  1. 创建函数myRounding

    函数[“]= myRounding (in1, in2)”= in1 / in2;结束

  2. 生成的代码myRounding

    cfg = coder.config (“自由”);cfg。GenerateReport = true;cfg。HighlightPotentialDataTypeIssues = true;codegen配置cfgmyRoundingarg游戏{fi(1, 1, 16日2),fi(1, - 1, 16岁,4)}

  3. 点击查看报告

  4. 在代码生成报告,单击代码的见解选项卡。

  5. 扩大潜在的数据类型问题部分。然后,扩大昂贵的定点操作部分。

    部门操作in1 / in2使用默认的舍入方法,最近的。改变了舍入方法地板上提供了一个更高效的实现。

找到并解决昂贵的比较操作

比较操作生成额外的代码当铸造操作需要做比较。例如,比较前一个无符号整数带符号整数,输入必须投之一signedness。考虑优化的数据类型的输入参数,不需要在生成的代码。

这个例子需要嵌入式编码器和定点设计师。

  1. 创建函数myRelop

    函数= myRelop (in1, in2) = in1 > in2;结束

  2. 生成的代码myRelop

    cfg = coder.config (“自由”);cfg。GenerateReport = true;cfg。HighlightPotentialDataTypeIssues = true;codegen配置cfgmyReloparg游戏{fi(1, 1, 14日,- 3,- 1),fi (14 1 0 3 1)}

  3. 点击查看报告

  4. 在代码生成报告,单击代码的见解选项卡。

  5. 扩大潜在的数据类型问题部分。然后,扩大昂贵的定点操作部分。

    第一个输入参数,三机一体,签署in2是无符号的。额外的代码生成,因为演员必须发生在两个输入之前可以相比。

    改变signedness和扩展的输入生成更高效的代码。

找到并解决多字操作

多字操作可以在硬件效率低下。当一个操作有一个输入或输出数据类型大于最大的字大小的处理器,生成的代码包含多字操作。你可以避免多字操作生成的代码通过指定地方fimath属性变量。您也可以手动指定输入和输出单词长度的操作生成多字代码。

这个例子需要嵌入式编码器和定点设计师。在这个例子中,目标词的长度是64。

  1. 创建函数myMul

    函数= myMul (in1, in2) = in1 * in2;结束

  2. 生成的代码myMul

    cfg = coder.config (“自由”);cfg。GenerateReport = true;cfg。HighlightPotentialDataTypeIssues = true;codegen配置cfgmyMularg游戏{fi(1, 1, 33岁,4),fi(1, - 1, 32岁,4)}

  3. 点击查看报告

  4. 在代码生成报告,单击代码的见解选项卡。

  5. 扩大潜在的数据类型问题部分。然后,扩大昂贵的定点操作部分。

    报告的旗帜in1 * in22号线的操作myMul

  6. 在代码中窗格中,暂停结束三机一体,in2,表达in1 * in2。你会看到:

    • 这个词的长度三机一体33位的字长吗in2是32位的。

    • 单词长度的表达式in1 * in2是65位。

    软件检测到一个65多字的操作,因为单词长度大于64年的目标单词长度。

  7. 为了解决这个问题,修改的数据类型三机一体in2这产品的单词长度不超过目标单词长度。另外,指定ProductMode房地产的地方fimath(定点设计师)对象。

相关的话题