打印
[DSP编程]

CCS5.2中IQmath.lib不兼容

[复制链接]
9753|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yibiaoyangcai|  楼主 | 2014-6-30 22:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天尝试着在CCS5.2下面建了个工程,关于IQmath的,其实就是把CCS3.3工程下面的文件拷贝到CCS5.2的工程下面,然后进行编译,然后就出现了下列问题:
warning #16002-D: build attribute vendor section TI missing in "../lib/2803x_IQmath_BootROMSymbols.lib<__Release_TMS320x2803x_boot_rom_out___IQ24div_tmp.obj>": compatibility cannot be determined
warning #16002-D: build attribute vendor section TI missing in "../lib/2803x_IQmath_BootROMSymbols.lib<__Release_TMS320x2803x_boot_rom_out___IQ24sin_tmp.obj>": compatibility cannot be determined
warning #16002-D: build attribute vendor section TI missing in "../lib/IQmath.lib<IQ24sinPU.obj>": compatibility cannot be determined
warning #16002-D: build attribute vendor section TI missing in "../lib/IQmath.lib<IQ24toF.obj>": compatibility cannot be determined
warning #16002-D: build attribute vendor section TI missing in "../lib/IQmath.lib<IQ30sinPU.obj>": compatibility cannot be determined
warning #16002-D: build attribute vendor section TI missing in "../lib/IQmath.lib<IQmathTables.obj>": compatibility cannot be determined
'Finished building target: my_IQtest.out'
查资料显示 IQmath.lib 的版本不兼容问题。别人说可以忽略这个问题!!!
但是!!!! ,不能编译,无法生成  .out  文件!!
如果可以忽略这个问题,那么要怎么设置??才能使编译器忽略这个问题???
请高手指点一下!

相关帖子

沙发
zhangmangui| | 2014-6-30 23:03 | 只看该作者
In addition to installing the IQmath software, to include a IQmath function in your code you have to:
*Include the IQmathLib.h include file
*Link your code with the IQmath object code library,IQmath.lib.
*Use a correct linker command file to place "IQmath" section in program memory.
*The section "IQmathTables" contains look-up tables for IQmath functions and it is available in the BOOTROM of F2810/F2812 devices. Hence,this section must be of set to "NOLOAD" type in the linker command. This
facilitates referencing look-up table symbols, without actually loading the section into the target.
For example, the following code contains a call to the IQ25sin routines in IQmath Library:
#include<IQmathLib.h> /* Header file for IQmath routine */
#define PI 3.14159
_iq input, sin_out; //typedef long _iq; /* Fixed point data type: //GLOBAL_Q format
void main(void)
{
input=_IQ30(0.25*PI); /* 0.25*PI radians represented in Q30 format */
sin_out =_IQ30sin(input);
}

IQmath Function Naming Convention
*GLOBAL_Q function, that takes input/output in GLOBAL_Q format
Examples:
· _IQsin(A)   /* High Precision SIN */
· _IQcos(A)   /* High Precision COS */
· _IQrmpy(A,B)  /* IQ multiply with rounding */
//*****************************************************************//
CASE1
Default GLOBAL_Q format is set to Q24. Edit “IQmathLib.h” header file to modify this
value as required, user can choose from Q1 to Q29 as GLOBAL_Q format.
#ifndef GLOBAL_Q
#define GLOBAL_Q 24  /* Q1 to Q29 */
#endif
CASE2
#define GLOBAL_Q 27  /* Set the Local Q value */
#include <IQmathLib.h>
//*****************************************************************//

使用特权

评论回复
板凳
zhangmangui| | 2014-6-30 23:04 | 只看该作者
在F2812的ROM中,有3K×16位被保留用于存放数学公式表以及未来的开发。主要应用于高速度和高精度的实时计算,比同等程度的ANSIC C语言效率更高,同时可以节省用户更多的设计和调试时间。1         IQmath库

为了应用IQmath,首先要从TI官方网站下载IQmath库,文档名称为SPRC087。我们主要应用库里面的:IQmath.cmd,IQmathLib.h,IQmath.lib。新建一个工程,将IQmath.lib,IQmath.cmd添加到工程,同时在main()函数之前增加语句:#include “IQmathLib.h”。注意:rts2800.lib和DSP281x_Headers_nonBIOS.cmd也要加到工程里面。

当然也可以不用IQmath.cmd文件,而用自己的CMD文件,只要在你的CMD里面添加以下代码即可:

MEMORY

{

   PAGE 0:

   BOOTROM (RW) : origin = 0x3ff000 , length = 0x000fc0

   RAMH0 (RW)   : origin = 0x3f8000 , length = 0x002000

}

SECTIONS

{

   IQmathTables   : load = BOOTROM , type = NOLOAD , PAGE=0

   IQmath        : load = RAMH0 , PAGE=0           

}

以上代码的红色部分可以适当修改。IQmathTables段必须设置为NOLOAD型。


2         IQmath应用
完成以上几步之后就可以在你的主函数里应用IQmath提供的函数进行计算了。建议在应用之前把IQmathLib.h浏览一下,了解各个函数是怎样实现的。下面举一个简单的例子:

#include "DSP281x_Device.h"
#include "IQmathLib.h"
#define  PI  3.14159
_iq   sinout_iq;
float  sinout_flt;
void main(void)
{
  InitSysCtrl();
  InitXintf();
  DINT;
  IER=0X0000;
  IFR=0X0000;
  
  sinout_iq=_IQ29sin(_IQ29mpy(_IQ29(0.25),_IQ29(PI)));
  sinout_flt=_IQ29toF(sinout_iq);
  for(;;){}
}

上述代码的功能是计算sin(π/4)的值,然后赋给sinout_flt。



sinout_iq值的格式为_iq29类型(也就是long型,参见IQmathLib.h),所以要通过函数_IQ29toF(sinout_iq)转化为float类型,才是我们需要的最终结果。

除个别函数外,一般情况下,计算公式里的所有变量都为一个iq类型,如上述主函数的第6行语句,全为_iq29类型。函数的具体讲解请参考IQmath手册,在此不再啰嗦。


3         Q格式的选择
IQmath一共提供了30种Q格式,具体选择哪种格式要兼顾精度和值的大小依据下表而定:



例如将数5.0转为Q格式,只能从_iq1~_iq28里面选择,而不能转化为_iq29和_iq30表示,因为_iq29能转化的最大值为3.999999998,否则会发生溢出。所以在定Q格式时要对数的范围做一下估计。也正是由于这个原因,有些三角函数不能采用_iq30格式。


4         计算arcsin与arccos
很多人有这样的疑问,函数表里面为什么没有提供arccos()和arcsin()函数呢?怎样才能计算这两个函数呢?其实只要你的高等数学过关的话,就很容易理解。因为arccos()和arcsin()可以通过反正切函数atan()间接求得,而函数表里面恰好提供了反正切函数,参见以下两个公式:

arcsin(X) = atan(X / sqr(-X * X + 1))                         反正弦

arccos(X) = atan(-X / sqr(-X * X + 1)) + 2 * atan(1)               反余弦

arcsec(X) = atan(X / sqr(X * X - 1)) + sgn((X) - 1) * (2 * atan(1))    反正割

arccosec(X) = atan(X / sqr(X * X - 1)) + (sgn(X) - 1) * (2 * atan(1))  反余割

使用特权

评论回复
地板
yibiaoyangcai|  楼主 | 2014-6-30 23:09 | 只看该作者
zhangmangui 发表于 2014-6-30 23:03
In addition to installing the IQmath software, to include a IQmath function in your code you have to ...

版主,这段话我尝试着去理解,但是,没有理解出什么可行性的结果,能不能再明确一点?

使用特权

评论回复
5
yibiaoyangcai|  楼主 | 2014-6-30 23:12 | 只看该作者
zhangmangui 发表于 2014-6-30 23:04
在F2812的ROM中,有3K×16位被保留用于存放数学公式表以及未来的开发。主要应用于高速度和高精度的实时计算 ...

你说的这个我基本上懂,但是这不能解决在CCS5.2下面调用IQmath.lib的不兼容性啊,IQmath.lib是用3.3的编译器的编译的,所以在5.2的版本下才会出现警告,这个警告影响了我的编译啊啊

使用特权

评论回复
6
lytlfly123| | 2019-10-8 17:17 | 只看该作者
yibiaoyangcai 发表于 2014-6-30 23:12
你说的这个我基本上懂,但是这不能解决在CCS5.2下面调用IQmath.lib的不兼容性啊,IQmath.lib是用3.3的编 ...

您好,我也遇到了,ccs3转到ccs5下,IQmath函数,出现报警,您怎么解决的?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:身在缘中,缘在心中,心在身中....

4

主题

51

帖子

2

粉丝