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.

[参考译文] TMS320F280049:具有 CCSv9.2和 C2000Ware 的 IQMath

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/878935/tms320f280049-iqmath-with-ccsv9-2-and-c2000ware

器件型号:TMS320F280049
Thread 中讨论的其他器件:MidascontrolSUITEC2000WARETIDM-1007

您好!

使用 ccs6.2和 controlSUITE 的 Midas 中的函数_IQ15div。

功能正常工作。

 

我对 ccs9.2使用了相同的代码、并使用了 c2000ware_V2Xxx、但该函数不再工作。

这是反汇编代码。

104      dffw->invout =(FFWD_Int16_t)_IQ15div (dffw->num、Uout);

       C$L3:

083082:  C242       MOVL        *-SP[2]、XAR6

083083:  06E1       MOVL        ACC、*+ XAR1[4]

083084:  7648B000   LCR          ..\src_coff \IQNdiv.asm:245:334$

083086:  1EC1       MOVL        *+ XAR1[0]、ACC

 

问题1:该功能是否已停产? 或者链接器文件中是否有新设置?

 

 

然后、我使用以下代码替换该函数

#define IQ15DIV (x、y)     (x << 15)/y)

 

这是等效的反汇编代码

104      dffw->invout =(FFWD_Int16_t)Q15_div(dffw->num、Uout);

       C$L3:

083080:  C242       MOVL        *-SP[2]、XAR6

083081:  06E4       MOVL        ACC、*+ XAR4[4]

083082:  FF3E       LSL             ACC、15.

083083:  00C83198   FFC         XAR7、L$DIV

083085:  1EC4       MOVL        *+XAR4[0]、ACC

 

新函数提供了正确的计算。

问题2:您是否看到此代码有任何问题?

问题3:是否有更好的方法来实现_IQ15div 运算?

此致、

KIEN

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

    Kien、

    它在我的机器上似乎工作正常。  您能否检查 IQ 数学段的链接器命令文件中包含的内容?

    在 device_support\f28004x\con\cmd 目录下的 C2000Ware 中有一个示例。  查找两个 IQMath 示例以及 IQmath 和 IQmathTables 段的放置方式。

    此外、请确保在项目属性->编译-> C2000链接器->文件搜索路径中正确输入了"IQmath_fpu32_coff .lib"。

    此致、

    Richard

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

    您好 Richard、

    这个问题来自我,然后寄给了基恩。

    正如我说过的、我使用 CCSv6.2和 controlSUITE 库编译了代码、它运行良好。

    然后、我使用 ccsc9.2和 c2000warev2.01.xx 使用了相同的代码。 _IQ15mpy 仍然工作良好、但 不使用_IQ15div。

    操作:

    我在 链接器搜索路径中包含了 IQmath_fpu32_coff .lib、其行为方式仍然相同。

    第二个问题、对于 F280049、使用正常整数乘法和除法时是否存在问题

    我查看反汇编代码、它看起来像整数乘法和除法几乎一样

    或比 IQmath 实现更紧凑。  

    此外、我查看了您最新的 PFC 示例代码、但没有看到任何 IQ 数学。

    谢谢和 rgds、

    Yancy

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

    Yancy、您好!

    IQNmpy 是使用 C instrinic 实现的、而 IQNdiv 是存档的库例程。  这就是我将重点介绍.lib 文件的原因。

    您能否检查您的项目是为 COFF 而不是 EABI 构建的?  在 CCS Edit 透视图中、右键点击工程名称、然后选择"Properties"。  在"General"类别中、什么是输出格式?  如果是 EABI、则需要更改它或链接其他库。

    如果这看起来正确、您能否附加您的项目以便我查看一下?

    我将检查 PFC 问题并返回给您。  我们发布了一款不支持 FPU 的器件、这已经有几年了、因此、在没有 IQmath 的情况下开发出了更新的参考设计。

    此致、

    Richard

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

    Yancy、

    在研究了最近 PFC 示例的库依赖性后、许多示例不依赖于 IQmath。  如果您能告诉我您看到的是哪一个、我可以确认它。

    此致、

    Richard

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

    Richard、

    我指的是 TIDM-1007-Interleaved CCM 图腾柱无桥 PFC。

    我的项目已设置为为为针对 COFF 构建。

    我将介绍处理器选项。 未使用 CLA。

    以及 include 库和路径。

    这是命令链接器

       /*分配 IQMath */
       IQMath            :> FLASH_BANK0_SEC11,PAGE = 0                //数学代码*/
       IQmathTables   :> IQTABLES,         page = 0,type = NoLoad /* ROM 中的数学表*/
       /*浮点数学*/
       FPUmathTables  :> FPUTABLES,        PAGE = 0,TYPE = NOLOAD

    谢谢和 rgds、

    Yancy

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

    图片是自动拍摄的。 以下是详细信息

    处理器选项

    芯片版本:28.

    CLA 支持 :cla0  

    浮点支持:fpu32

    增强的整数除法支持:未指定

    TMU 支持:未指定

    VCU 支持:未指定

    包含库

    IQMath_fpu32.lib

    rts2800_fpu32.lib

    IQMath_fpu32_coff .lib

    Rgds、

    Yancy

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

     

    在 ccsv9.2中生成的映射文件的一部分

    .TI.ramfunc
    *         0   00080344   0000004c    运行 ADDR = 00008000
                     00080344   00000048    f28004x_sysctrl.obj (.TI.ramfunc)
                     0008038c   00000004    F28004x_usdelay.obj (.TI.ramfunc)

    >>>缺少 IQmath obj <<<

    Cla1Prog  0   0008c000   000000c0    运行 ADDR = 00008800
                     0008c000   00000018    cla_tasks.obj (Cla1Prog:_Cla1Task1)
                     0008c018   00000018    cla_tasks.obj (Cla1Prog:_Cla1Task2)
                     0008c030   00000018    cla_tasks.obj (Cla1Prog:_Cla1Task3)
                     0008c048   00000018    cla_tasks.obj (Cla1Prog:_Cla1Task4)
                     0008c060   00000018    cla_tasks.obj (Cla1Prog:_Cla1Task5)
                     0008c078   00000018    cla_tasks.obj (Cla1Prog:_Cla1Task6)
                     0008c090   00000018    cla_tasks.obj (Cla1Prog:_Cla1Task7)
                     0008c0a8   00000018    cla_tasks.obj (Cla1Prog:_Cla1Task8)

    在 ccsv6.2中生成的映射文件的一部分

    .TI.ramfunc
    *         0   00085000   0000004b    运行 ADDR = 00008000
                     00085000   00000047    f28004x_sysctrl.obj (.TI.ramfunc)
                     00085047   00000004    F28004x_usdelay.obj (.TI.ramfunc)

    IQMath    0   003fe000   00000047     
                     003fe000   00000047    IQmath_fpu32.lib:IQ15div.obj (IQmath)

    Cla1Prog  0   00086b50   000000c0    运行 ADDR = 00008800
                     00086b50   00000018    cla_tasks.obj (Cla1Prog:_Cla1Task1)
                     00086b68   00000018    cla_tasks.obj (Cla1Prog:_Cla1Task2)
                     00086b80   00000018    cla_tasks.obj (Cla1Prog:_Cla1Task3)
                     00086b98   00000018    cla_tasks.obj (Cla1Prog:_Cla1Task4)
                     00086bb0   00000018    cla_tasks.obj (Cla1Prog:_Cla1Task5)
                     00086bc8   00000018    cla_tasks.obj (Cla1Prog:_Cla1Task6)
                     00086be0   00000018    cla_tasks.obj (Cla1Prog:_Cla1Task7)
                     00086bf8   00000018    cla_tasks.obj (Cla1Prog:_Cla1Task8)

    我还找到了以下主题

    e2e.ti.com/.../575167

    新库中的 IQMath 是否已停产?

    谢谢和 rgds、

    Yancy

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

     

    我将 IQMath 移到了"flash_BANK0_SEC5"而不是  IQTABLES  :origin = 0x3FE000

    这是我得到的结果。

    在 ccsv9.2中生成的映射文件的一部分

    .TI.ramfunc
    *         0   00080344   0000004c    运行 ADDR = 00008000
                     00080344   00000048    f28004x_sysctrl.obj (.TI.ramfunc)
                     0008038c   00000004    F28004x_usdelay.obj (.TI.ramfunc)

    IQmathTables
    *         0   00085000   00000b50    无负载部分
                     00085000   00000b50    IQmath_fpu32_coff.lib:IQmathTables.obj (IQmathTables)

    IQMath    0   00085b50   00000047     
                     00085b50   00000047    IQmath_fpu32_coff .lib:IQ15div.obj (IQmath)

    在 ccsv6.2中生成的映射文件的一部分

    .TI.ramfunc
    *         0   00085000   0000004b    运行 ADDR = 00008000
                     00085000   00000047    f28004x_sysctrl.obj (.TI.ramfunc)
                     00085047   00000004    F28004x_usdelay.obj (.TI.ramfunc)

    IQMath    0   0008504c   00000047     
                     0008504c   00000047    IQmath_fpu32.lib:IQ15div.obj (IQmath)

    IQmathTables
    *         0   00086000   00000b50     
                     00086000   00000b50    IQmath_fpu32.lib:IQmathTables.obj (IQmathTables)

    但是、如果我测试该函数、它会为我提供以下结果
    _IQ15div (4095、27333)=   0xFFFFFFFF   ccsv9.2

    _IQ15div (4095、27333)=   4909                 ccsv6.2

     

    Rgds、

    Yancy

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

    Richard、

    我认为它是固定的。  IQMath 和 IQMathTables 都从 ROM 移动到闪存。

    可能我在尝试解决问题时已经使用了 ROM 位置。

    已  从 IQmathTables 中删除定义"type = NoLoad"。

      

       /*分配 IQMath */
       IQMath             :> FLASH_BANK0_SEC5,PAGE = 0                   //闪存中的数学表*/
       IQmathTables   :> FLASH_BANK0_SEC5,page = 0  /*,type = NoLoad */* Flash 中的数学表*/

    现在的问题是、我应该移动到浮点(整数)还是使用 IQMath?

    Rgds、

    Yancy

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

    Yancy、

    很高兴找到了解决方案。 有关 build 属性警告的线程是正确的、但在 IQmath 情况下警告是无害的:它不会导致问题。

    我确认 TIDM-1007不是使用 IQmath 构建的。 您可以任意一种方式继续;您使用的器件具有 FPU、我们将来不太可能发布任何不支持硬件中浮点的器件。 除非您希望将代码迁移回较早的定点 C28x 器件、否则没有什么理由使用 IQmath。

    此致、

    Richard

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

    Richard、

    无论如何、浮点代码是紧凑的(使用您的器件)、因此我将从现在开始继续进行浮点计算。

    非常感谢!

    Kien、

    感谢您将此问题提交给本论坛。

    Rgds、

    Yancy

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

    Richard、

    非常感谢您的支持。

    Yancy、

    不用客气。 请继续使用 C2000、因为它是适用于实时应用的最佳 DSC。