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.

[参考译文] CODECOMPOSER:如何使用 CLA 数学代码创建静态库

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1385266/codecomposer-how-to-create-a-static-library-with-cla-math-code

器件型号:CODECOMPOSER
Thread 中讨论的其他器件:C2000WARE

工具与软件:

你(们)好、

我想创建一个静态库、其中包含 CLA 上运行的任务使用的功能。 因此、静态库主要是声明和定义内联函数的头文件。 是否有在 CCSv12中进行此设置的首选方法? 我已经创建了一个新的 CCS 项目、其中"Output Type"设置为"Static Library"(静态库)。

我不确定如何让 CCS 利用我需要的 CLA 数学库-我认为这通常是在链接器配置中完成的、但我不能完全确定如何实现。

在一个这样的文件中、我添加了"CLAmath.h"、并在工程的 C2000编译器选项中添加了 CLA 库的路径(从 C2000ware 到包含选项)、然后添加了_TMS320C28XX_CLA_作为预定义符号。 我不确定这是不是正确的方法,这肯定是不正确的。

今天结束时、我想创建许多头文件、一个*。cla 文件可以包含这些头文件。 这些头文件包含一些利用 CLA 数学库的函数、可以编译为静态库以包含在许多不同项目中。

理想情况下、我想直接使用 clAx_math_library_eabi.lib 文件、但我在另一篇文章中看到 CCS 无法在内部创建包含另一个静态库(https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/611386/ccs-how-can-i-build-a-static-lib-which-include-two-lib-in-ccsv7)的静态库。

谢谢、

吉姆

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

    关于头文件、我不建议如何向您的客户提供这些文件。

    关于静态库...请勿尝试以某种方式将您的库与任何其他库(例如 CLAx_math_LIBRARY_eabi.lib)组合在一起。  而是向您的客户记录您的库依赖这些其他库。  然后由您的客户负责提供所有这些库作为其应用程序最终链接的输入。

    谢谢。此致、

    -George.

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

    对于第二点、是否仍然可以#include "CLAmath.h"并使用提供的 TRIG 函数? 我有一个头文件、包含如下文件:

    #include "CLAmath.h"
    
    inline void do_something(float32_t value, float32_t *out)
    {
       ... // do stuff to value
       
       *out = sinf(value);
    }

    我已将 CLAmath.h 标题的路径添加到我的包含搜索路径。

    我想将像这样的函数编译到库中、这样我就可以在许多其他项目中使用它、因为这似乎是合适的。

    谢谢!

    吉姆

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

    您正在编写包含在其他 CLA 源文件中的头文件。  它与任何 CLA 源文件具有相同的限制。  有关详细信息、 请搜索 C28x 编译器手册 中名为  CLA C 语言实现的子章节。  例如、它指出您无法调用类似的标准 RTS 函数 正弦 .

    还有一个我怀疑你忽略的问题。  如果客户在 CLA 头文件中包含内联函数、那么他们会调用该函数、而不会进行优化构建。  在这种情况下、函数不会被内联。  然后、链接器期望找到函数的常规(非内联)实现方案、该实现方案可以成为非内联调用的目标。   

    该解决方案需要您针对 EABI (我想您已经做到了)和 C99进行构建。  它是 本文中所述的内联方法的变体 (并非来自 TI)。

    创建头文件、就像在上一篇文章中所展示的那样。  此外,在库的一个源文件中,包括该头文件和该行...

    extern inline void do_something(float32_t value, float32_t *out);

    您必须使用编译器选项进行构建 -- abi=eabi --- c99 .   

    谢谢。此致、

    -George.

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

    很多方面都有所帮助、我正朝着使库编译.CLA 文件这一方向努力、所以它应该能够调用 RTS 函数。

    强调这种方法的注意事项是非常有用的。

    谢谢