This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28379D:在 C2000编译器中执行浮点变量的简单除法时出错

Guru**** 2587365 points
Other Parts Discussed in Thread: TMS320F28379D

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1195150/tms320f28379d-error-while-performing-simple-division-of-float-variable-in-c2000-compiler

器件型号:TMS320F28379D

您好!

我将执行浮点变量数据类型的简单除法、但每次调试时都会获得不同的结果。 使用 C2000编译器版本:TI v21.6.0.LTS  

下面是我的简单代码片段:

float32_t reqPeriod = 0.00、Freq1 = 0.00;

MAIN ()

reqPeriod = 1.00/频率1;  

问题:  

案例1:输入:频率1 = 80010.0

ReqPeriod = 0.997898 (预期 ReqPeriod  = 1.249844e^-5)

并转至 void __error__(const char *文件名、uint32_t 行);

现在、再次输入不同的输入

案例2:下一个输入:Freq1 = 8000.0

REQPeriod:1.25e^-5  

现在、再次输入相同的先前输入  

案例3:Freq1 = 80010.0

ReqPeriod:1.249844e^-5x

在检查同一输入的同时、每次都会得到错误的结果。

在 TMS320F28379D launchpad 上执行上述代码。

在计算除法时遇到随机错误、您能提供帮助吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、SuPriya、

    为了验证、您是否在 CCS 项目中启用了任何优化? 此外、由于您说误差是随机的、如果您将公式放入 while 循环并使用相同的数字重复执行它、您是否会得到不一致的结果(在每次执行循环后清除该值)?

    此致、

    Omer Amir

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Omer、  

    我尚未在 CCS 工程中启用任何优化级别。 我现在已经检查了在观察窗口中保留变量的观察、并且实时刷新、它的工作正常。 之前我在每个周期中放置断点并检查结果、也许是因为使用断点、我每次都会遇到随机错误、我的分析是否正确? 如果是、那么为什么由于放置断点、我们得到了错误的值。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、SuPriya、

    最好的检查方法是在其中包含 Estop 指令的一些条件、以便如果该值超出了一定的误差范围、您可以立即知道;  我不确定 在执行操作后立即停止可能会发生什么情况、但未准备好正确的结果。  如果您之前没有实时刷新、可能会解释这一点。 如果您对此有进一步的问题、请告诉我。

    此致、

    Omer Amir