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.

[参考译文] TMDSSOLARUINVKIT:IQMath + If 语句

Guru**** 2538950 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/609094/tmdssolaruinvkit-iqmath-if-statements

器件型号:TMDSSOLARUINVKIT

尊敬的所有人:

我想知道是否可以将不同的 Q 格式与 if 语句混合在一起、例如:

#define VPV_MIN      _IQ7 (15.0)

Gui_Vpv =_IQ20mpy (pv_meas _vol_avg>>4、_IQ20 (pv_VOL_SENSE_MAX));

if (Gui_Vpv > VPV_min)

当我运行该代码时、我始终 会在 if 语句中得到 true 条件。 我通过为 VPV_min 提供与 Gui_Vpv 相同的 Q 格式来解决这个问题,那么问题是,我是否可以使用 if()中的不同 Q 格式? 如果可以、IQmath 库是否存在错误?

谢谢你

迭戈

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

    只有 IQ 格式相同时、数字比较才有意义。 从根本上说、Gui_vpv 和 VPV_min 都是长整数。 IQ 格式仅影响我们对整数的解释、即名义二进制点的位置。 如果 Gui_vpv 的二进制补码的评估结果大于 VPV_min 的二进制补码、则比较返回 true。 这与 IQmath 无关。

    为了使比较有效、您必须对齐二进制点:例如、通过将 Gui_vpv 右移13来对齐。

    此致、

    Richard