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:数学计算库调用问题

Guru**** 2589300 points
Other Parts Discussed in Thread: C2000WARE, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1167252/tms320f280049-maths-compute-library-calls-problem

器件型号:TMS320F280049
主题中讨论的其他器件:C2000WARESysConfig

大家好、

客户提出的问题需要您的帮助:

如上图所示,我在配置工具中启用了 FPUfastRTS 快速计算库,并打算使用带有快速根数的函数 float32_t sqrtf()。 在右侧的图中、c2000_libraries.h、math.h、fpu32/C28x_Fpu_Fastrts.h、C28x_FPU_FastRTS.h 头文件分别被调用。 因此、如果我已经将所需的头文件和库函数链接到项目中、我在下图中调用了程序中生成的函数、如右图所示。 我将调用库设置为具有优先级模式  

然后、我编译程序并查看.map 文件以观察函数调用、如下图所示、可以看到 rts2800_fpu32_fast_finc补 快速库仅使用 div_F32.obj、而不使用 sqrt_F32.obj。 也就是说、只使用快速除法(代码中有除法)而不是快速根打开、原因是?

您还可以看到、我输出 ELF 文件、当我输出 COFF 文件时、我会看到一个错误、显示该错误  

但是、由于我调用所有链接的库、我应该自己调用 COFF 格式的库、即使我直接调用 COFF 格式的库、我也会得到这个错误、为什么? 情况紧急。

这两个问题是我设置非规范?的原因

请帮您检查此问题吗?谢谢。

此致、

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

    您好 Ben、

    我实际上无法正确查看您附加的图像、打开它们时它们太小。

    [引用 userid="534511" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1167252/tms320f280049-maths-compute-library-calls-problem "]然后我编译了程序并查看了.map 文件以观察函数调用、如下图所示、可以看到 rts2800_fpu32_fast_fincred 快速库仅使用 div_F32.obj、而不使用 sqrt_F32.obj。

    我使用 C2000Ware 4.02创建了一个工程、并获得了用于显示 sqrtf 的映射文件。 我认为这应该是显示的函数的名称、因为 FPUfastRTS 库的 sqrt_f32源文件中的函数名为"sqrtf"。 当您运行项目时、是否无法进入正确的函数?

    [引用 userid="534511" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1167252/tms320f280049-maths-compute-library-calls-problem "]您还可以看到我输出了 ELF 文件,当我输出 COFF 文件时,我会看到一个错误,显示 为

    我能够使用 COFF 正确构建示例项目、  但是、要正确使用该函 数、您必须确保手动包含 COFF 库文件以代替 c2000ware_libraries.cmd.genlibs (由于 C2000Ware 是旧版、因此 SysConfig 中未包含 COFF 库文件)。 您可以在该路径中找到它(C2000Ware_4_02_XX_XX\libraries\math\FPUfastRTS\c28\lib\rts2800_fpu32_fast_fincre_cff.lib)。

    此致、

    Omer Amir

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

    您好 Omer,

    很抱歉给您带来不便、我重新编辑了图片、现在应该清除了。

    此致、

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

    sqrtf 是可以的、但它不应该是我想要的库。 它可能是下图左侧的库。 最直观的一点是、计算需要时间。 我想使用右侧的快速计算库。 我想使用正确快速计算库中的快速算法来加快计算时间、因此我无法调用现在只能为该快速 sqrtf 写入的算法。 但我仍然想看看如何调用它。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="515979" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1167252/tms320f280049-maths-compute-library-calls-problem/4391142 #4391142]I 能够使用 COFF 正确构建示例项目、  但是、要正确使用该函 数、您必须确保手动包含 COFF 库文件以代替 c2000ware_libraries.cmd.genlibs (由于 C2000Ware 是旧版、因此 SysConfig 中未包含 COFF 库文件)。 您可以在此路径中找到它(C2000Ware_4_02_XX_XX\libraries\math\FPUfastrts\c28\lib\rts2800_fpu32_fast_fincre_coff.lib)。

    我可能已经理解了这一点、这可能是由于配置工具问题、因为我的项目是在 C2000_ware4.01版本中完成的、C2000_ware4.02在几天前进行了更新、并且可能存在版本兼容性问题  

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

    您好 Ben、

    SysConfig 应使用 c2000ware_libraries.cmd.genlibs 拉入正确的库文件。 这将引入常规 rts2800_fpu32_fast_f늹 up.lib 文件、这正是您所要求的。  它是否仍然没有为您调用正确的函数? 您是否已验证  c2000ware_libraries.cmd.genlibs 是否包含在 C2000 Link 项目属性的文件搜索路径中? 如果  c2000ware_libraries.cmd.genlibs 文件包含在库文件输入选项中、那么您是否可以运行该程序并向我展示您的程序调用 sqrtf 的函数? 您可以使用"装配体步进"按钮来获得正确的装配体功能。

    此致、

    Omer Amir

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

    您好 Omer、

    虽然我不理解、但我认为这可能是一个问题。 就这一点而言、汇编步骤进入、我不知道程序一旦在这里运行就会出错。  

    此致、

     

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

    您好 Omer、

    我不知道"汇编步骤进入"可以做什么。 我的调试结果就在这里。 我单击上面的"汇编步骤进入"、我的 sqrf 函数位于 control_task.c 中 当您运行至 sqrtf 并单击"assembly step ino"时、您将跳转到 math.h 我不知道这是不是你想要看到的结果、而右侧是我自己的函数(包括 sqrtf)运行的时间、我不知道为什么、我使用 sqrtf 运行它的速度很快、这需要5.4166us。 我自己编写的、基于快速开放根算法、需要6uS、我对此感到非常困惑。 我想它不应该调用 Fast Library、但它的速度有点快、这很奇怪。

    此致、

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

    您好 Ben、

    由于您使用的是 SysConfig、因此您应该具有以下项目设置、或者如果出于某种原因需要直接路径、至少具有相应的设置。

    [引用 userid="534511" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1167252/tms320f280049-maths-compute-library-calls-problem/4394254 #4394254"]我不知道"汇编步骤进入"可以做什么[/引用]

    我指定汇编指令步进的原因是、我认为您尝试运行 FPUfastRTS 库提供的 sqrtf 函数、 在这种情况下、唯一的验证方法是查看反汇编中的函数地址、或者只是单步进入函数查看其位置。 您不能使用正常的步入操作、因为这会跳过汇编代码、而仅跳过我测试过的 C 函数。

    [引用 userid="534511" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1167252/tms320f280049-maths-compute-library-calls-problem/4394254 #4394254"]我单击上面的"汇编步骤到"、我的 sqrf 函数位于 control_task.c

    如果您尝试使用 FPUfastRTS 库提供的 sqrtf 函数、这是不正确的。 它应该进入库函数的 sqrT_f32.asm 文件。 这意味着您的程序出于某种原因不包含具有正确路径的文件。 验证您的设置是否按照我在上面的图像中所做的设置、您应该能够正确调用 sqrtf 函数。

    [引用 userid="534511" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1167252/tms320f280049-maths-compute-library-calls-problem/4394254 #4394254"]我自己编写的内容,基于快速开放根算法,它需要6uS,我对此非常困惑。

    查看 sqrtf 函数的基准测试、它应该只需要29个系统时钟周期。 如果它运行的是正确的函数、这应该与您看到的时序一致。 我不确定 您对此有何疑问。

    此致、

    Omer Amir