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.

[参考译文] CCS:IQ 库和 TMS320F28030

Guru**** 2609955 points
Other Parts Discussed in Thread: TMS320F28030

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/688802/ccs-iq-library-and-tms320f28030

主题中讨论的其他器件:TMS320F28030

工具/软件:Code Composer Studio

您好!

我一直在使用 TMS320F28030。

我有两个数据需要以 IQ 格式对其进行乘法、但我找不到一个 IQ 值、该值为我提供了正确的值。

我到目前为止所做的是;

//定义  

#define GLOBAL_Q 16 //将16更改为几个要测试的其他值
long GlobalQ = global_Q;

#define res16 0.0000762939453125 // = 5/2^16
#define DATA 0x9B76 //16位数据

_iq res16_IQ;
_iq data_iq;

在主循环中;

RES16_IQ =_IQ (RES16);
DATA_IQ =_IQ (DATA);

当我将 GLOBAL_Q 16更改为时

GLOBAL_Q 15或更低我获得的 DATA_IQ 值正确、但 RES16_IQ 的值错误、

GLOBAL_Q 16或更高版本我获得的 RES16_IQ 值正确、但 DATA_IQ 的值错误。

1) 1)是否有任何方法可以在_IQ 值中乘以 DATA_IQ 和 RES16_IQ? 例如_IQmpy (data_IQ、res16_IQ)

2)对于工程、当我使用闪存对其进行调试时、我可以看到_IQ 的正确值、但当我尝试不使用 FLASH _IQ 值时、这些值看起来与预期的值不同。

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

    在 IQ16中、有符号整数范围为15位、因此不能表示0x9B76 = 39、798。 它与 IQ15搭配使用、因为有足够的位来表示数字。 您应该会在行上收到有关此内容的编译器警告
    DATA_IQ =_IQ (DATA);

    这是与任何定点机器之间的折衷。 IQ 数学库有助于管理数字范围和分辨率、但它不能更改可用于表示数字的位数。 这里最好的解决方案是局部使用 IQ15进行乘法运算、然后将结果转换回 IQ16。 您将在"res16"上失去分辨率、但至少您可以表示结果。

    或者、您当然可以将浮点与此器件上的 RTS 库一起使用(代价是计算时间大幅增加)、也可以通过迁移到浮点器件(如 F28069)来使用浮点器件、在这种情况下、问题就会消失。

    关于库函数无法从闪存中工作的问题、您能否检查链接器命令文件中"IQmath"段映射到的位置? 有关 F28035的.cmd 文件示例、请参阅 IQ 数学库用户指南的第16页。 您的段应该与这些类似、但在闪存程序存储器段中使用 IQmath。

    此致、

    Richard