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.
您好,
我正在寻找一种快速的方法,将IQ样式长整型数的分数转换为浮点,用于后续的__cospuf32() TMU内部调用。
我怀疑F2.8075万中有多少IQ数学支持(没有ROM表,对吗?)。 我尝试了以下操作:
#include "IQmathLib.h"
#include <mathing.h>
typedef float float32_t;
float32_t x,y,z;
int32_t lq16val = 0x0003c000;/* 3.75 */
Int32_t t0,T1,T2,T3;
float32_t (*lq2f)(Int32_t)=_IQ16toF;/*如果Q更改*/,使用指向右侧IQxxtoF函数的函数指针
#define LQ16_mask_fraction (1L <<16)- 1)
无效
TEST_TMU()
{
T0 = CpuTimer0Regs.TIM.all;
x = ldexp ((float32_t)(lq16val和LQ16_mask_fraction),-16);
T1 = CpuTimer0Regs.TIM.all;
Y =_IQ16toF (lq16val和LQ16_mask_fraction);
T2 = CpuTimer0Regs.TIM.all;
z =(* lq2f)(lq16val和LQ16_mask_fraction);
T3 = CpuTimer0Regs.TIM.all;
t0 = t0 - t1;// 70个周期
T1 = T1 - T2;// 32个周期
T2 = T2 - T3;// 37个周期
x =__sipuf32 (z);//等
}
我使用C:\ti\controlSUITE\libs\maturity\IQmatht\V160\lib\IQmatht_fpu32.lib链接,我在生成时收到警告:
警告#1.6002万-D:“J:\workspace\firmware\c2000\libc2000\lib\IQmatch_fpu32.lib<IQ16toF.obj>”2000”中缺少Build属性供应商部分TI:无法确定兼容性
警告#1.0247万-D:创建不带书帖规范的输出书帖"IQmath "
计算的结果正确(x == y == z = 0.75)。
我的问题是:
2.8075万上的IQ数学如何?
是否有更好的想法来完成工作(更快!)? 我搜索了表7-[6-8]。 SPRU514L TMS320C28x优化C/C++编译器指南中的TMS320C28x C/C++编译器内部函数,但未找到任何合适的内容。
谢谢!
弗兰克
您好,Frank,
fmdhr 说:2.8075万上的IQ数学原理是什么?[/QUOT]
IQMath表已从ROM中取出,因此您必须将其加载到此设备上的闪存中,但除此之外,IQMath可用于此设备
是否有更好的方法(更快!)? 我搜索了表7-[6-8]。 SPRU514L TMS320C28x优化C/C++编译器指南中的TMS320C28x C/C++编译器内部函数,但未找到任何合适的内容。[/QUOT]
你可以试试这个
((float)(lq16val和LQ16_mask_fraction))*(1.0 /(1UL<16))
它应屏蔽分数部分,转换为浮点,然后乘以2^-16。 编译器应预计算值2^-16,这样就不会浪费它的运行时周期。
或者,您也可以尝试此操作
((float)(((UINT32_t) lq16val << 16)>16)*(1.0 /(1UL<16))
您好,Vishal,
当然,代码将在最终版本中内联(或内联)。 我将代码放在几个函数中,只是为了获得不同版本的可靠和可比测量值。 优化器似乎使用了FPU管道中的延迟时段,因此产生了奇怪的结果。
再次感谢,
弗兰克