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/OMAPL138B-EP:函数内联

Guru**** 2526700 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/566611/ccs-omapl138b-ep-function-inlining

部件号:OMAPL138B-EP

工具/软件:Code Composer Studio


尊敬的各位:

我指的是CCS 5.1 .1中的C6000编译器。 我们使用的是-O3 -MS3

编译器似乎拒绝涉及struct或volatile参数的函数内联。 在“2.11 5内联限制”一节中也提到了这一点。 因此,我还收到消息681 'The function ... cannot be inlined'。 (此消息仅指要内联的函数,而不是调用的位置)

但是,我们经常使用短联用于类型转换。 一个(毫无意义的)示例:

----------------
typedef结构{
   内部低;
   Int HIGH (内部高)
} int32separate;

typedef联合{
 Long I64    ;
 int32单独ISEP;       
} int64var;

inline int64var test_add(int64var x)

 int64var结果= x;
 result.isep.low ++;
 result.isep.high ++;

 返回结果;
}

int64var test_var_dummy;

void test_add_main (void)

 test_var_dummy = test_add(test_var_dummy;
}
----------------

我再次确认这在GCC 4.4 的不同平台上一直有效(并已内联),并且是那里最快的解决方案。

GCC中的行为是否发生了变化,或者这是TI DSP特定的行为吗? 是否有任何方法可以覆盖此问题?

感谢您的帮助
亚历山大

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    答案在很大程度上取决于编译器版本,它与CCS版本不同。 但也请注意-MS3是较小代码大小的选项,并且也会禁止内联。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请观看 此视频 以了解如何确定编译器的版本。

    谢谢,此致,

    -George

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

    编译器版本为TI v.7.3 .1

    Eabi (ELF)

    谢谢

    亚历山大

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

    编译器版本7.3 1已使用5年以上。  我建议您至少升级到7.3 .23版。  这些版本仅在错误修复方面有所不同。  但有许多这样的修复方法。  其中一个解决了这个内联问题。

    使用版本7.3 23和选项--abi=eabi --opt_level=3从第一个POST中构建简短的测试用例,然后查看函数test_add是内联的,而不是调用的。

    请参阅标题为 编译器版本的Wiki文章 ,了解如何升级编译器版本。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    该问题已在7.3 .5中修复。 这是一项改进,而不是缺陷,因此SDOWP或缺陷历史记录中没有任何内容。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我在使用编译器更新时遇到问题。

    使用“帮助/安装软件”和“代码生成工具”更新服务器时,该过程开始,但下载后我收到一个错误消息

    "收集要安装的项目时出错

    会话上下文为:(profile=EPP.package.cpp,phone=org.eclipse.equinox.internal.p2.engine.phases.Collect,操作数=)。

    下载工件时出现问题:org.eclipse.update.feature,com.ti.CGT 6000.8 .C.L.C.11.Win32,8.1 .2。

    读取签名内容时出错:C:\Users\baehalex\AppData\Local\Temp\signatureFile1689693333280204162.jar

    处理文件的签名时出错:C:\Users\baehalex\AppData\Local\Temp\signatureFile16.8969万33280204162.jar</s>33.2802万 0.4162万

    对于我选择的任何编译器都是如此,这里是8.1。2。


    通过手动下载,我得到了一个名为"ti_CGT_C6000_Windows.23_windows_installer[1]" 7.3 的文件,但不知道如何处理它。 从Window/Preferences/CCS/builD/Compilers手动升级时无法识别此文件。

    感谢您的帮助
    亚历山大

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

    Alexander Baehr 说:
    使用帮助/安装软件,代码生成工具更新服务器时,进程开始,但下载后我收到错误[/QUOT]

    我对此问题深表歉意。  我不知道这是怎么发生的。  我很调查这件事。

    Alexander Baehr 说:
    使用手动下载,我获得了一个名为"ti_CGT_C6000_Installer.23_windows_installer[1]" 7.3 的文件,但不知道如何处理它。

    您应该得到一个名为ti_CGT_C6000_TI 7.3.23_windows_installer.exe的文件。  它是一个自解压可执行文件。  只需运行它。  将弹出一个对话框,引导您完成安装。  您可能希望将其安装在CCS安装编译器的常用位置。  类似于...的东西

    7.3 .................23. 

    接下来,您需要让CCS发现此编译器。  有关  详细信息,请参阅Wiki文章编译器安装和选择。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    将下载文件重新命名为.exe工作正常。 我现在已并行安装了7.3 .........23。

    7.3 .23中没有内联问题。

    谢谢
    亚历山大