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/TMS320F2.8027万F:使用IQmath和Solar_Lib_IQ与不兼容声明的问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/581392/ccs-tms320f28027f-using-iqmath-and-solar_lib_iq-problems-with-incompatible-declarations

部件号:TMS320F2.8027万F
主题中讨论的其他部件: controlSUITETMDSOLARUINVKIT

工具/软件:Code Composer Studio

大家好,

我正在尝试将Solar_Lib_IQ库中的一些函数与TMS320F2.8027万F (目前的LaunchPad XL)配合使用。 我在CCS项目中包括了Solar_IQ.h和IQmathLib.h,但我遇到了一些构建问题,我猜是因为在类型定义过程中存在一些冗余。

确切的问题是“此声明没有存储类或类型说明符”,当我第一次尝试使用Solar_IQ库中的类型(第34行,第35行,第36行)使用一些变量时,它提供了此问题:

30 //IQ数学变量
31 SPLL_1ph_Sogi_IQ spll1;
32 SPLL_1ph_Sogi_IQ) LPF_Coeffe spl_LPF_Coef1;
33.
34 spl_LPF_Coef1.B0_LF=B0_LPF;
35 spl_LPF_coef1.B1_LF=B1_LPF;
36 spl_LPF_coef1.A1_LF=A1_LPF;

SPLL_1ph_Sogi_IQ_LPF_Coeff是Solar_IQ库的结构类型部分,B0_LPF是IQmath库中定义为_IQ23类型的常量。

关于如何解决这一问题的任何建议? 提前非常感谢

在main.h上以及在包含目录树中遵循我的包含库列表,以防您能够找到不兼容的人:

#include "DSP28x_Project.h"    //设备头文件和示例包括文件
#include "F2802x_common/include/clk.h"
#include "F2802x_common/include/flash.h"
#include "F2802x_common/include/gPIC.h"
#include "F2802x_common/include/pie.h"
#include "F2802x_common/include/PLL.h"
#include "F2802x_common/include/wp.h"
#include "F2802x_common/include/wdog.h"
#include "F2802x_common/include/sci.h"
#include "F2802x_common/include/timer.h"
#include "F2802x_common/include/adc.h"
#include "F2802x_common/include/SPI.h"
#include "F2802x_common/include/F2802x_globala原 型2802 型.h"
#include "IQ/include/Solar_IX.h" //This one includes all the solar functions。
#include "include/IQmathLib.h" //this one包括所有IQmath函数。
#include <stdbool.h>

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

    您需要重新排列并确保声明一个数学类型。  

    #ifndef Math_type
    #Define Math_type IQ_Math
    #endif

    #include "include/IQmathLib.h" //this one包括所有IQmath函数。  

    #include "IQ/include/Solar_IX.h" //This one includes all the solar functions。

    看看这是否可以解决问题,或者您也可以在上查看使用此lib的示例代码

    C:\ti\controlSUITE\DEVELOG_KIT\TMDSOLARUINVKIT_V100

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

    感谢 Manish的提示,

    我得到了IQ_数学。 但我意识到我真正需要的是利用硬件乘法器,因为软件乘法对我的应用程序来说非常缓慢。  我已在项目“CCS生成/处理器选项”的属性中将“指定浮点支持-float support”配置为fpu32。

    但是我遇到了很多构建错误,因为驱动程序库(driverlib.lib)指定了ISA修订版"C2800",并且它表示它与以前定义的其他ISA修订版不兼容。 我可能使用了错误的.cmd文件吗?  以下是控制台响应:

    '正在构建目标:SPLL_V0.out '

    '调用:C2000连接器'

    c:\ti/ccsv6/tools/compiler/c2000_c2000_v28<xmt-block0>2000 6.2 -ml -mt --float_support=fpu32 -g --define="_flash"--define="lag_model"--define="blo_debug"--cmd_diagnostics --display_warn=225 --display_display_flash="line_strass_l_line_strass_-sp_l_-fs/crack-fs/-fs/-cp_lin_-fs/-cru_l_lin_-fs/-cru_l_support/ 6.2 6.2  

    链接>

    错误#1.6008万-D:文件“C:\ti\controlSUITE\DEVICE_SUPPORT\F2802x\v220\F2802x_common\lib\driverlib.lib<wdog.obj>”2802”指定ISA修订版“C2800”,它与以前文件或命令行中指定的ISA修订版“C28FPU32”不兼容

    错误#1.6008万-D:文件“C:\ti\controlSUITE\DEVICE_SUPPORT\F2802x\v220\F2802x_common\lib\driverlib.lib<sci.obj>”2802”指定ISA修订版“C2800”,它与以前文件或命令行中指定的ISA修订版“C2700”不兼容

    错误#1.6008万-D:文件“C:\ti\controlSUITE\DEVICE_SUPPORT\F2802x\v220\F2802x_common\lib\driverlib.lib<PWM.obj>”2802”指定ISA修订版“C2800”,它与以前文件或命令行中指定的ISA修订版“C2700”不兼容

    错误#1.6008万-D:文件“C:\ti\controlSUITE\DEVICE_SUPPORT\F2802x\v220\F2802x_common\lib\driverlib.lib<PLL.OBJ>”2802”指定ISA修订版“C2800”,它与以前文件或命令行中指定的ISA修订版“C2700”不兼容

    错误#1.6008万-D:文件"C:\ti\controlSUITE\DEVICE_SUPPORT\F2802x\v220\F2802x_common\lib\driverlib.lib<pie.obj>"指定2802指定ISA修订版"C2800",它与以前文件或命令行中指定的ISA修订版"C2700"不兼容

    错误#1.6008万-D:文件"C:\ti\controlSUITE\DEVICE_SUPPORT\F2802x\v220\F2802x_common\lib\driverlib.lib<gPIO.obj>"指定2802指定ISA修订版"C2800",它与以前文件或命令行中指定的ISA修订版"C2700"不兼容

    错误#1.6008万-D:文件“C:\ti\controlSUITE\DEVICE_SUPPORT\F2802x\v220\F2802x_common\lib\driverlib.lib<flash.obj>”2802”指定ISA修订版“C2800”,它与以前文件或命令行中指定的ISA修订版“C2700”不兼容

    错误#1.6008万-D:文件“C:\ti\controlSUITE\DEVICE_SUPPORT\F2802x\v220\F2802x_common\lib\driverlib.lib<CPU.obj>”2802”指定ISA修订版“C2800”,它与以前文件或命令行中指定的ISA修订版“C2700”不兼容

    错误#1.6008万-D:文件“C:\ti\controlSUITE\DEVICE_SUPPORT\F2802x\v220\F2802x_common\lib\driverlib.lib<clk.obj>”2802”指定ISA修订版“C2800”,它与以前文件或命令行中指定的ISA修订版“C2700”不兼容

    错误#1.6008万-D:文件“C:\ti\controlSUITE\DEVICE_SUPPORT\F2802x\v220\F2802x_common\lib\driverlib.lib<ADC.obj>”2802”指定ISA修订版“C2800”,它与以前文件或命令行中指定的ISA修订版“C2700”不兼容

    错误#1.6008万-D:文件“C:\ti\controlSUITE\DEVICE_SUPPORT\F2802x\v220\F2802x_common\lib\driverlib.lib<F2802xX_asmfuncs.obj>”2802”指定2802指定ISA修订版“C2800”,它与以前文件或命令行中指定的ISA修订版“C2700”不兼容

    错误#1.6008万-D:文件“C:\ti\controlSUITE\DEVICE_SUPPORT\F2802x\v220\F2802x_common\lib\driverlib.lib<F2802xX_GlobalVariableDefs.obj>”2802”指定2802指定ISA修订版“C2800”,它与以前文件或命令行中指定的ISA修订版“C2700”不兼容

    错误#1.6008万-D:文件“C:\ti\controlSUITE\DEVICE_SUPPORT\F2802x\v220\F2802x_common\lib\driverlib.lib<F2802xX_DefaultIsr.obj>”2802”指定2802指定ISA修订版“C2800”,它与以前文件或命令行中指定的ISA修订版“C2700”不兼容

    警告#1.0063万-D:指定了"_c_int00"以外的入口点符号: "code_start"

    错误#1.001万:链接期间遇到错误;未生成"SPLL_V0.out

    >>编译失败

    gmake:***[SPLL_V0.UT]错误1

    gmake:target `all' not remake because of errors.

    ****构建已完成****

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

    TMS320F2.8027万F是定点器件,因此没有浮点硬件乘法器,您不能使用fpu32选项,您需要为此器件使用IQmath,或者考虑升级到具有FPU的器件

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

    好的,我明白了。 我认为我误解了32x32 MAC操作。

    我只是尝试以最快的速度乘法两个带符号的16位整数。

    现在我正在使用STM32F2系列中使用的以下函数,但我不确定它是否比正常乘法A*B或_IQ16bumpy快。 你怎么看? 是否有任何方法可以加快乘法速度?

    再次感谢您的帮助。

    void main()

    Int16_t A,B,结果;

    Int32_t temp=0;

    MUL_Q15_Q15_Q31 (A,B,&temp);

    result=(Int16_t)(temp>>16);

    }

    void mul_Q15_Q15_Q31 (Int16_t OP1,Int16_t OP2,Int32_t *输出)

    Int32_t临时;

    温度=(Int32_t) OP1*(Int32_t) OP2;

    IF (temp>=0x4000万) /* Overflow (-1*-1)*/

     temp=0x7fffffffffffffffff;

    }

    否则

     temp=temp<1;/*   左移一位以删除redondant符号位*/

    }

    *out =温度;

    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当您想要保持小数点时,IQ数学库非常有用,即它将确保在乘法后获得正确缩放的结果,

    Q点是一种通过模拟小数点来实现控制代码的方法。

    上述操作应该有效,IQmath在所有情况下不一定更快,但它将为您处理移位等问题,因此使用IQmath函数比在代码中仅使用多个和移动更容易,

    您的代码将更易于维护,而且如果您确实决定切换到基于FPU的设备,则无需更改代码,只需更改IQmath开关即可。