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.

[参考译文] 编译器/ARM-CGT:Code Composer Studio™︎论坛

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/954175/compiler-arm-cgt-code-composer-studio-forum

器件型号:ARM-CGT

工具/软件:TI C/C++编译器

为了充分了解任何限制、如果有人能向我提供有关以下三个缺陷的更多信息/背景、我将不胜感激:

1) 1) SDSCM00052849编译器和汇编器在 IT 指令的格式上不同意

有一个相关主题:e2e.ti.com/support/development_tools/compiler/f/343/t/503292

使用相关线程的简单测试用例、仅在选择以下特定选项时报告警告:

--opt_level=2

--opt_for_speed=3

--code_state=16

结果如下:

IT 指令有一个限制、即 cpsie 指令是 IT 块中不允许的指令之一。

报告的警告如下:

在 IT 块内部缺少条件代码

我需要了解更多信息/上下文、例如:

这是否只会在特定的选项组合(如上面详述的选项)时发生?

或者、这是否仅在 与其中一个编译器内在函数结合时发生?

2) CodeGen-4105找不到">="运算符的定义

除了标题之外、没有其他相关主题和信息。

我需要了解更多信息/背景。

3) 3)使用-c_src_interlist 时、CodegGen-4084汇编器错误与 bogus .iendfunc asm 指令

除了标题之外、没有其他相关主题和信息。

我需要了解更多 信息/背景。

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

    我正在与编译器开发团队合作、以了解有关这些问题的更多详细信息。  这些详细信息可能会在接下来的几天内一次出现一个问题。

    谢谢、此致、

    乔治

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

    圣保罗

    我已更新以下条目:

    使用-c_src_interlist 时、CodeGen-4084汇编器错误与 bogus .iendfunc asm 指令

    有了这些附加信息:

    描述:

    当使用选项-c_src_interlist 时、codegen 会发出不带位置(PSN)信息的.iendfunc 汇编指令。

    使用18.12.0.LTS (和-ooff -o0、1、2、3、4)的以下选项重现:
    armcl -mv7M4 -ss

    >>警告:无法打开源文件'no_PSN_file':无此类文件或目录
    "t236.asm"、错误! 第154934行:指定了[E0002]非法助记符
                    iendfunc
    "t236.asm"、错误! 在第155034行:[E0002]指定了非法助记符
                    iendfunc
    "t236.asm"、错误! 第155134行:指定了[E0002]非法助记符
                    iendfunc
    3装配体错误、无装配体警告
    源代码中的错误-汇编器已中止

    权变措施(如果您看到上述汇编错误):

    请勿使用选项-c_src_interlist (-ss)

    此致、
    Greg

     

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

    Greg、

    还有一个问题:

    是否可以使用--src_interlist (-s)选项替代?

    此致、

    圣保罗。

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

    圣保罗

    问得好。 是的、我刚刚测试并使用--src_interlist 可以避免汇编器  

    我将更新错误条目。

    谢谢
    Greg

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

    关于 SDSCM00052849编译器和汇编器在 IT 指令的格式上不同意、导致此错误的测试用例的内容如下所示、在使用编译器选项-mv7R4 -code_state=16进行编译时会发生此错误。   

    void testfunction (void)
    {
    unsigned int saved_cpSR;
    
    /*在本地保存和禁用 IRQ */
    saved_CPSR =(unsigned int)_disable_IRQ ();
    
    /*在此处执行一些关键段处理*/
    
    /*恢复 IRQ */
    如果((saved_CPSR & 0x00000080UL)=0U)
    {
    (void)_enable_IRQ ();
    }
    }
    

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

    Anna、感谢您的回复、

    从我的原始问题中可以看出、为了充分了解与此缺陷相关的任何限制、如果您能为我提供 与相关主题 e2e.ti.com/support/development_tools/compiler/f/343/t/503292中当前记录的信息/背景信息、我将不胜感激。

    我能够使用您在上面重复的测试用例观察到缺陷。

    但是 、我仅在选择以下特定选项时才观察到缺陷:

    --opt_level=2

    --opt_for_speed=3

    --code_state=16

    问题:

    1) 1)您能否在缺陷报告中记录导致此缺陷的特定选项或选项组合?

    例如,您是否知道缺陷是否仅在--code_state=16时出现?

    2) 2)优化是否是促成因素?

    3) 3)仅 当与编译器内在函数_disable_IRQ 和/或_enable_IRQ 结合使用时、才会出现此缺陷?

    我们非常感谢您提供任何其他信息。

    此致、

    圣保罗。

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

    抱歉、Paulo、我列出了我复制错误时使用的最小选项集、但忘记了将默认优化级别设置为2。  因此、我可以确认、仅当优化级别为2或更高时才会看到此错误。  我仅在使用--code_state=16时才会看到它。  我看不到--opt_for_speed 是相关的,任何值都不会改变错误的存在。  芯片版本/经验模式也很重要、因为必须提供内在函数。

    当优化在 O2或更高版本上启用时、这似乎是与使用内在函数相关的错误。  我不能保证,如果不充分分析错误,但当我们把它作为低优先级时,我没有计划这样做。  也许您可以进一步解释您对此问题的关注。

    谢谢、

    安娜

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

    Anna、感谢您提供的其他信息。

    为了解释我的问题:

    对于任何安全关键型软件开发、与编译器相关的开放性缺陷都是影响评估的主题、以便充分 了解和记录任何限制。

    在这种情况下、我认为缺陷报告缺乏足够的信息来作出判断。

    报告本身除了标题之外几乎没有什么信息,标题本身听起来相当严肃:"编译器和汇编器在 IT 指令的格式上不同意"。

    相关的 E2E 主题确实提供了测试案例、但没有详细说明缺陷是否只能在特定的选项组合中发生。

    这让我需要更多信息。

    此致、

    圣保罗。

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

    好的、我花了更多的时间来调查这个问题并更新了外部记录。  同步到外部错误数据库可能需要一段时间。

    生成的汇编代码中存在错误、因为在 IT 块中不允许 CPSIE 指令。  因此、汇编器警告不正确、因为问题不是缺失的条件代码。  在--opt_level=2和--code-state=16处编译的测试用例会生成以下汇编代码:

    IT CC;  
    CPSIE I

    这肯定来自于结合使用启用/禁用 IRQ 内在函数和优化。  不应将分支优化到远离 IT 块的位置、因为 CPSIE 指令不允许在一个块内。  在不相互了解的情况下、对 IT 块中的分支进行优化以及从内在函数中生成 CPSIE 指令是单独进行的。

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

    Anna、感谢您花更多的时间讨论这个问题、

    您现在提供的详细程度正是我要查找的描述类型。

    此致、

    圣保罗。

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

    乔治

    我仍在等待对三个缺陷之一的答复、其中我需要额外 的信息/背景:

    CodeGen-4105找不到">="运算符的定义

    我正在进行安全关键型软件开发、因此与编译器相关的所有未解决缺陷都将受到影响评估、以便充分 了解和记录任何限制。

    在这种情况下、我认为缺陷报告缺乏足够的信息来作出这种判断。

    请您与 编译器开发团队一起跟进。

    感谢 Greg 和 Anna、我收到了有关其他两个缺陷的足够信息/背景。

    此致、

    圣保罗。

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

    您好、Paulo、

    回复: https://sir.ext.ti.com/jira/browse/EXT_EP-8725 (代码生成-4105)

    我更新了此缺陷的公开描述、并提供了更多详细信息:

    "TI Arm C/C++代码生成工具 v20.2.x.LTS 安装程序随附的 include 文件 libcxx/算法包含对 C++运行时库中_RandomAccessIterator 类实现的 C++'>='运算符的引用、该运算符未正确定义。

    对未定义的">="运算符的引用出现在 include/libcxx/algorithm 的第1713行,将导致编译器发出错误...

    "/ /include/libcxx/algorithm、第1713行:错误:没有运算符">="与这些操作数匹配
                操作数类型为:iterator >= const Iterator
              在"_RandomAccessIterator std 的实例化过程中检测到 std::__2:_search_n (_RandomAccessIterator、_RandomAccessIterator、_size、const _TP &、_BinaryPredicted、 标准::__2::随机访问迭代器_tag)[使用_BinaryPredict=std:__2:__equive_to &、_RandomAccessIterator=Iterator、_size=unsigned int、_TP=value]"

    当以 include/libcxx/算法行1699开始的__search_n()模板被实例化时。"

    此致、

    Todd Snider