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/TMS320F28374D:C 代码静态内联不起作用

Guru**** 2436500 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/791647/ccs-tms320f28374d-c-code-static-inline-not-working

器件型号:TMS320F28374D

工具/软件:Code Composer Studio

大家好,  

我需要一些函数 的最大速度 ,并且希望使用 静态内联。

现在,我在 CCS8,编译器18.1上运行,  甚至使用  pragma FUNC_ALWAYS_INLINE  I m 无法使编译器 执行内联, 汇编器 也是一样 的。  每次我看到函数调用。  

我尝试了所有级别的优化 , 以及  是否使用 pragma FUNC_ALWAYS_INLINE (在我看到的附加示例中,函数调用)。  e2e.ti.com/.../inline-issue-in-compiling.docx

请检查什么?  

您是否有一个小的工作示例 进行交叉检查?

此致

卡洛

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

    卡洛、

    [引用 user="Colombo Carlo"] CCS8,编译器18.1 [/quot]

    这可能不是问题、但我建议改用最新的 LTS (长期支持)编译器(18.12.0.LTS)。

    对于内联:

    • 编译器仅在启用某些优化时内联  
    • pragma FUNC_ALWAYS_INLINE 覆盖编译器内联决策、并可能导致相当大的代码(!)
    • 该 pragma 必须出现在对函数的任何声明或引用之前  
    • 内联在编译期间发生、而不是链接。  编译器必须能够查看被调用函数的主体才能插入函数。  如果函数位于预编译库中、则它将采用对象格式、编译器将无法内联该函数
    C 中的语法为:
    #pragma FUNC_ALWAYS_INLINE (func);
    C++中的语法为:
    #pragma FUNC_ALWAYS_INLINE; 

    此致、

    Lori

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

    我想看看您是否能够取得任何进展?

    此致、
    -洛里
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,Lori,
    脱机共享代码和问题
    此致
    Calro
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    卡洛、

    感谢您的详细信息。 正如我现在所理解的、问题是当使用函数的指针调用函数时。 直接调用函数时不会出现这种情况。

    当编译器内联拉取函数时、它会直接将函数的代码放置到位。 为此、它必须确切知道要使用哪个函数。 当直接调用内联函数时、这是直接向前的。

    在这种情况下、使用函数指针。 这是对函数的间接调用。 编译器会尝试确定函数指针的内容、然后将间接调用更改为直接调用。 但是,在实践中,这种尝试失败了。 一旦确定编译器不知道函数指针的内容、它就别无选择、只能调用函数。 内联函数始终需要准确知道调用哪个函数、而这里不是这样。

    此致
    Lori