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.

[参考译文] 编译器/TMS320F280049:C28x 和 CLA 中的 Misra-C 2004检查不同?

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/784977/compiler-tms320f280049-misra-c-2004-check-is-different-in-c28x-and-cla

器件型号:TMS320F280049

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

香榭丽舍

我向我们的客户提出这一问题。

用户的环境是:

CCS:8.3.0.00009

编译器:TI v 18.1.4.LTS

奇怪的是、当他们在 C28x 和 CLA 中编译相同的代码时、MISRA-C 2004会产生非常不同的结果。

在 CLA 上、它们对代码有更多的警告。

这些警告基本上是规则10.1和12.2、如下所示:

#1393-D (MISRA-C:2004 10.1/R)如果表达式复杂、整数类型表达式的值不应隐式转换为不同的基础类型
#1393-D (MISRA-C:2004 10.1/R)如果表达式复杂、整数类型表达式的值不应隐式转换为不同的基础类型
#1393-D (MISRA-C:2004 10.1/R)如果表达式复杂、整数类型表达式的值不应隐式转换为不同的基础类型
#1487-D (MISRA-C:2004 12.2/R)根据标准允许的任何评估顺序、表达式的值都应相同
#1393-D (MISRA-C:2004 10.1/R)整数类型表达式的值如果不转换为相同符号的更宽整数类型、则不应隐式转换为不同的基础类型
#1393-D (MISRA-C:2004 10.1/R)整数类型表达式的值如果不转换为相同符号的更宽整数类型、则不应隐式转换为不同的基础类型
#1393-D (MISRA-C:2004 10.1/R)整数类型表达式的值如果不转换为相同符号的更宽整数类型、则不应隐式转换为不同的基础类型
#1393-D (MISRA-C:2004 10.1/R)整数类型表达式的值如果不转换为相同符号的更宽整数类型、则不应隐式转换为不同的基础类型
#1393-D (MISRA-C:2004 10.1/R)整数类型表达式的值如果不转换为相同符号的更宽整数类型、则不应隐式转换为不同的基础类型

我们的问题:

1) 1)为什么上述 代码在 C28x (右侧)上传递、但在 CLA (左侧)上收到许多警告?

2) 2)当我们尝试实施 MISRA-C 2004检查时、CLA 是否有任何特殊限制?

你有什么意见吗?

黄维恩

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

    这可能与 int 类型的大小不同相关。  在 C28x 上、它是16位。  在 CLA 上、它是32位。  例如,此语句...

    short_variable = int_variable; 

    (笑声) 构建为 C 代码时不获取 MISRA 诊断、但构建为 CLA 代码时看到诊断10.1。

    谢谢、此致、

    乔治

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

    在上面的用户代码中,他们似乎已经有了像 U16这样的显式转换。
    那么、您是否意味着即使代码中存在显式转换、仍会出现此类警告、因为 CLA 的 int 大小与 C28x 不同?

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

    为了详细解释这些内容、我需要一个测试案例、允许我重现诊断。  对于获取 MISRA 诊断的源文件、请按照文章 如何提交编译器测试用例中的说明进行操作。  但有一个差异。  我需要确切了解文件是如何为 CLA 和 C28x 构建的。

    谢谢、此致、

    乔治

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

    请提供请求的测试用例。

    谢谢、此致、

    乔治

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

    乔治

    我们尝试使用一个简单的项目来重现此问题、并发现潜在的"int"可能是问题、正如您所说的那样。

    如果我们正确地转换"int"、则看不到问题。

    我们将与用户进行更详细的检查。

    因此、现在可以解决此问题。

    如果有任何新的相关问题、我将发布另一个问题。

    非常感谢。

    黄维恩