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.

[参考译文] TMS320F28069:IQdiv 所有路都生成整数567497

Guru**** 2553260 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1067014/tms320f28069-iqdiv-allways-results-in-the-integer-567497

部件号:TMS320F28069

您好,

我尝试使用 IQmath 库计算此除法:

//(in the header file "Encoder.h" speediq is defined as:)
double speed;

//(...)


//And then in the Encoder.c file i did as follows:
//p->speed = 105468.75f/temp1;                          //the division i want to make
p->speed = _IQtoF(_IQdiv(_IQ(105468.75),_IQ(temp1))); //The division using IQ

我在“Encoder.h”文件中将 global_Q 重新定义为10。 并试图将结果转换为浮点,但结果总是567497

我认为这可能是与相关帖子相同的问题,但无法找到如何解决这一问题... 我从未使用过 IQ 库,因此任何评论都非常受人赞赏,

谢谢你,

Joan Marc

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

    您好,

    浮点结果是567497还是 IQ 结果? temp1的所有值都发生这种情况吗?  

    山塔努

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

    您好,shanty,

    如果我声明变量“速度”为长,则浮点结果为567497.75,则只有在我声明变量“速度”时才会得到整数567497。 我也尝试了“temp1”的不同值,但我总是得到同样的结果。 我不知道它是否有用,但我试图将变量“speediq”声明为以下类型,并超越了行:

    "P->speediq =_IQtoF(_IQDIV(_IQ (105468.75),_IQ (temp1));"

    我得到了以下结果,与 temp1的值无关,我总是得到相同的结果...:

    spediq as int:=>得出32767

    speediq 的长度:=>得出567497

    spediq as float =>得出567497.75

    spediq as long double =>得出567497.75

    speediq as _IQ =>结果为567497 (调试器将其表示为“长”)

    我还删除了_IQtoF()函数,只是为了查看我得到的结果,所以此行是:

    "p->speediq =_IQdiv (_IQ (105468.75),_IQ (temp1));"我还尝试了 temp1的二发值,所有结果都是一样的。

    以 int 为单位的 speediq:=>结果为10031

    speediq 的长度:=>得出581117743

    spediq as float =>得出581117696.0

    speediq as long double =>得出581117743.0

    speediq as _IQ =>结果 为581117743 (调试器将其表示为“长”)

    我还发现,如果我尝试了调试器的“步入”功能,它只是逐步完成,与“步入功能”相同。 我应该能够“步入”吗? 很奇怪...我真的不知道我可以检查或尝试什么,我收到了任何评论。

    提前感谢您的关注,

    -琼·马克

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

    您好,

    temp1的值是什么? IQ10具有以下范围:[-2097152, 2097152)和精度~0.001 (请参阅 IQMath 文档中的第3.2节)。  

    根据 temp1的值,它可能已溢出或溢出范围。 您可以通过更改 Q 值来尝试吗?

    山塔努