购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.4 浮点运算的定点编程

TMS320F2833x处理器进行浮点运算最快捷的方法是直接使用浮点类型(定义float来完成)。但这样会使编译器产生大量代码来完成一段看似十分简单的浮点运算,不可避免地大量占用系统资源。定点处理器中如何对浮点运算进行高效处理变成十分重要的问题。

2.4.1 定点—浮点数据的转换

1.浮点数转定点数

实现定点数和浮点数之间的转换,只需规定浮点数的整数位和小数位。以32位定点数为例,设转换因子为Q(即小数位数为Q),整数位数为31-Q(有符号数的情况),则定点数与浮点数的换算关系为定点数=浮点数×2 Q

例如,浮点数-2.0转换到定点数(Q=30):-2×2 30 =-2147483648。

2.定点数转浮点数

32位有符号数的范围是-2147483648~2147483647。将2147483647转换为浮点数为2147483647/2 30 ,即1.999999999。

这表明Q30格式下,所能表示的最大浮点数为1.999999999(并不等于2),存在1E-9的误差。

表2-3所示为Q0~Q30对应的数据范围和分辨率。可借助MATLAB求取它们之间的转换,即在命令窗口中输入:

表2-3 Q0~Q30对应的数据范围和分辨率

例如,将5.0转换成Q格式,只能从iq1~iq28当中进行选择,而不能转换为iq29和iq30。因为iq29能转换的最大值为3.999999998,所以进行Q格式定标时要对数的范围做一下估计,也正是因为这个原因,诸如IQNsin、IQNcos、IQNatan2、IQNatan2PU、IQatan的三角函数不能采用Q30格式。

2.4.2 IQMath库的使用

BootROM中内置了强大的数学表来帮助我们完成转换工作,只要按照一定的格式进行书写,编译器就会自动调用相关的库函数完成。TI公司所提供的IQMath库是由高度优化的高精度数学函数组成的集合,能够帮助C/C++编程人员将浮点算法无缝地连接到TMS320F2833x器件中,通过使用现成的IQMath库来完成这些烦琐的工作。

1.IQMath数据类型

IQMath函数的输入/输出是典型的32位定点数据且定点数的Q格式可以在Q1和Q30之间变化。我们使用typedef来定义这些IQ数据类型。

2.IQMath函数的调用

(1)在工程中引用库文件

1)C语言编程时:包含头文件IQMathLib.h。

2)C++语言编程时:包含头文件IQMathLib.h和IQMathCPP.h。

(2)主程序中引用相关的头文件

1)C语言编程时:

2)C++语言编程时:

(3)CMD文件中指明IQMath数学表的位置 CX00o3ye35qUHOG2aszkv6viVcc1/iGKBIwSJo3HPlSGf8d35Trdd02HrbUSgRms

点击中间区域
呼出菜单
上一章
目录
下一章
×