TMS320F28377D库函数操作(IQMath移植及简单使用)

1.前言

我先介绍一下IQMath库,首先IQMath是干什么的?在计算机中,我们对于小数有两种使用方式,即定点与浮点类型,我们常用的float与double都属于浮点型。浮点型的好处是可以表示范围较大,但在计算中速度会慢;定点的范围比较固定,但是计算速度快。至于其他区别,大家可以到网上搜索,有非常全面的解答。而在28377里IQMath就可以进行浮点对定点的转换,定点转浮点,定点的各种计算函数。这样便可以加快我们计算的速度。同时,28377也支持将程序直接编译成定点的模式,加速计算。

 

在开始前先给发给大家一些IQMath使用教程,因为我对IQMath的具体函数没有进行大量的测试,因为我没有实际的应用场景,这里给大家一些链接,可以移植好后测试自己想要的函数。

TI的32位定点DSP库IQmath在H7和F4上的移植和使用 - STM32H7 - 硬汉嵌入式论坛 - Powered by Discuz! (armbbs.cn)

TMS320F28335使用IQmath库 - 知乎 (zhihu.com)

官方的文档也有,路径是这个C2000Ware_5_01_00_00\libraries\math\IQmath\c28\docs\IQmath_Quickstart.pdf

 

 2.移植

所有的文件在官方的SDK里有,路径是这个C2000Ware_5_01_00_00\libraries\math\IQmath\c28

文件夹是这样的,我们需要的东西主要在lib和include这两个文件夹里

TMS320F28377D库函数操作(IQMath移植及简单使用)_第1张图片

lib是这样的 

TMS320F28377D库函数操作(IQMath移植及简单使用)_第2张图片

include文件夹是这样的 

TMS320F28377D库函数操作(IQMath移植及简单使用)_第3张图片

将这些文件放到工程下,最后是这样的

TMS320F28377D库函数操作(IQMath移植及简单使用)_第4张图片

我这里因为编译后选择是输出elf文件,所以将elf文件编译,其他文件跳过编译即可

TMS320F28377D库函数操作(IQMath移植及简单使用)_第5张图片

 在cmd文件下我们也需要对IQMath预留空间,这部分没有固定要求,只需要是内存即可

TMS320F28377D库函数操作(IQMath移植及简单使用)_第6张图片

3.使用

首先在使用前我们需要将头文件包含进来,只需要包含一个IQmathLib.h这个文件即可

a116244c868b4b07aa02db9e212a8112.png

但是我们还不能使用,我们需要修改头文件里的东西。

最主要的是位数,其定义在这,我是将位数改为了16位。可以看到范围是从1-30

TMS320F28377D库函数操作(IQMath移植及简单使用)_第7张图片

这个是全局的位数,说到位数不得不说,浮点转定点的计算方式了

TMS320F28377D库函数操作(IQMath移植及简单使用)_第8张图片

正因如此,定点的位数越大,能确定小数点后的位数也就越高,即数字越精确。

但是于此同时,还有数字范围的问题,其表示范围如下图所示

TMS320F28377D库函数操作(IQMath移植及简单使用)_第9张图片

随着位数的减小,表示的范围在增加,但是会越来越不精确。具体的计算方式大家可以再上网搜索,这里不再进行过多的介绍。

等上述内容都修改好了,我们就可以写程序调试了。

我们对于定点数的定义有两种方式,一种是_iq16,一种是long

TMS320F28377D库函数操作(IQMath移植及简单使用)_第10张图片

TMS320F28377D库函数操作(IQMath移植及简单使用)_第11张图片

我个人推荐使用_iq16这种方式,因为在后续使用其他定点函数的时候可能会涉及到强制类型转换,警告之类的。

定义完成后我们就可以测试了,最基础的就是将浮点类型转换为定点类型,其函数是_IQ(...)

TMS320F28377D库函数操作(IQMath移植及简单使用)_第12张图片

我们进行仿真测试

TMS320F28377D库函数操作(IQMath移植及简单使用)_第13张图片

可以看到数值是32768,我们再笔算一下

0.5*2^16=32768

TMS320F28377D库函数操作(IQMath移植及简单使用)_第14张图片

没有问题,一切顺利。

4.结语

总的来说IQMath的移植还是非常方便的,毕竟是TI自己开发的东西,不可能移植非常困难。总的来说用起来还是非常方便的,不过我没有太多使用场景,大家如果测试其他函数也可以告诉我,说说测试效果。库里面好像还包括FFT,FIR这些复杂的运算,我还没有测试过,如果有测试也可以在评论区告诉我测试的结果啊。

顺带说一嘴编译器浮点与定点设置在这有一个relaxed(浮点)与strict(定点)这以选择,大家可以选择。

TMS320F28377D库函数操作(IQMath移植及简单使用)_第15张图片

 

 

你可能感兴趣的:(TMS320F28377,dsp开发)