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:下一个 ARM-CGT 版本的更新请求

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/902991/compiler-arm-cgt-update-requests-for-next-arm-cgt-release

器件型号:ARM-CGT
主题中讨论的其他器件: HALCOGEN

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

您好!

我们期待着产品线的固件更新路线图、该产品线使用基于 ARM Cortex-R5F 的微控制器 TMS57LC4357、并且正在评估我们更新 TI ARM 代码生成工具认证的时间表。

非常感谢 TI 最近发布了 ARM-CGT 的 v20.2.1.LTS 更新。  TI 的后续更新计划是什么?

ARM-CGT 存在一些特定的已知问题、我们非常希望得到解决:

CodeGen-4304 C++功能导致 ARM9上未对齐访问的运行时失败

这一问题对我们来说是非常困难的。  我的理解(请参阅 https://e2e.ti.com/support/tools/ccs/f/81/t/832858中的讨论 )是正确编写的代码在运行时可能会遇到灾难性错误,并且没有关于哪些代码可能或夜间不容易受到攻击的指导-- 即使是对"C++"的引用也会产生误导、因为 C 代码也可能会发生这种情况。  我们唯一的补救办法是说"我们在内部测试期间没有看到过它、因此希望我们不会在现场看到它的发生"、这是在支持可能造成人身伤害的安全相关产品时需要采取的一个艰难的立场。

CodeGen-662 双常量错误地转换为浮点更改会产生轻微的结果

我明白这个问题的实际"物理"(也就是"物理")影响很可能很小。  但是、我希望您能够理解、在发布固件时为缓解此问题所付出的努力非常大!

实际上、我们需要检查整个固件中双精度数学的每种用法、包括任何第三方代码(包括 TI 提供的 HALCoGen 或其他代码)的用法、并确定是否、尽管设计人员假定有意使用双精度计算来开始、 每个计算都是安全的、因为它 a)不需要真正使用双精度开始、或者 b)它不使用容易受到此问题影响的双精度字面量(可能是多个宏级别深)。

CodeGen-1059 编译器不尊重 C99指定初始化程序中的部分覆盖

同样、这对发布固件进行了重要分析。  虽然我们通常不会在初始化期间多次指定同一子对象、但在发布期间验证此操作需要付出大量努力。  (如果您知道任何包含此检查的静态分析工具、这将非常有帮助!)

TI 有哪些解决这些问题的计划?  在包含一个或多个此类问题修复的哪种时间表上、更新版本的前景如何?

在考虑我们自己的路线图时、您可以提供的任何信息都将对我们非常有帮助。

-thx

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

    我们将详细了解其中的每一个问题、并计划详细了解这些问题。  当有更多报告时、我们将在此处发布。

    谢谢、此致、

    乔治

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

    [引用 user="1138"]代码生成-4304 C++功能导致 ARM9上未对齐访问时出现运行时故障

    经过进一步讨论和审阅后、我们得出结论、这是用户错误、而不是编译器中的错误。  相关条目已更新为详细信息。

    另外两个仍在审查中。  请继续为患者。

    谢谢、此致、

    乔治

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

    关于...

    [引用 user="1138"]代码生成-662 双常量错误地转换为浮点更改会导致轻微的变化

    外部条目已更新,提供了有关导致问题的条件的更多详细信息。  这样您就可以更轻松地看到您的代码没有这些条件。

    谢谢、此致、

    乔治

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

    关于...

    [引用 user="1138"]CodeGen-1059 编译器不尊重 C99指定初始化程序中的部分覆盖[/quot]

    我们计划解决此问题。

    下面是另一个说明问题的示例。

    typedef 结构{
    int i1;
    int i2;
    int i3_array[2];
    }inner_t;
    
    typedef 结构{
    into1;
    inner_t o2_struct;
    }体外_t;
    
    inner_t inner_global ={
    i2 = 53、
    .i1 = 52、
    i3_array[1]= 29、
    i3 _array[0]= 28
    };
    
    OUT_t OUTERY_GLOBAL;
    
    void fxn (void)
    {
    OUTERIN_t OUTERIN_LOCAL ={
    1、
    .o2_struct = inner_global、 /* aaa */
    .o2_struct.i2 = 51、 /* BBB */
    .o2_struct.i3_array[1]= 27
    };
    
    OUTER_GLOBAL = OUTER_LOCAL;
    
    /* OUTER_GLOBAL_OUT.o2_STRUCT.i1不是52、而是0 *
    /* io_global.o2_struct.i3_array[0]不是28、而是0 */
    } 

    问题从标记为 AAA 的行开始。  它应该为所有 inner_t 字段分配一个值。  但是、标记为 BBB 的行会导致所有 INNER 字段为0、然后初始化.o2_STRUCT.i2。  末尾的注释指示哪些 inner_t 字段是错误的。

     只要后续指定的初始化程序与以前指定的初始化程序重叠,就可能会出现此问题。

    谢谢、此致、

    乔治