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.

[参考译文] HALCOGEN:符合 Halcogen MISRA-C 标准

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/597358/halcogen-halcogen-misra-c-compliance

器件型号:HALCOGEN

您好、Hercules 团队、

用户正在尝试使用 CCS v7检查 Halcogen 4.06.00生成代码的 MISRA-C 兼容性。  有许多警告。  这很容易复制。  我使用 Halcogen 创建了一个新的 RM42项目、并且刚刚保存了生成的文件。  然后、我创建了一个新的空 CCS v7工程、该工程使用 ARM 编译器16.9.3.LTS。   我为 CCS 工程启用了"All" MISRA 检查。  只需构建单个源文件(adc.c)、我就会收到数十条警告。  然后、我更改为仅"必需" MISRA 检查。  我收到的警告要少得多、但仍然有警告。  一些警告与包含来自编译器的文件有关。  但其他文件来自 Halcogen 生成的源文件(adc.c)本身。  例如:

PTR++;

"./source/adc.c "、第446行:警告#1476-D:(MISRA-C:2004 17.4/R)数组索引应是唯一允许的指针算术形式

CCS 应检查与 MISRA-C:2004的兼容性、与 Halcogen 应该兼容的版本相同。  我看到关于这一问题的其他几个较旧的帖子,答复表明,已使用 LDRA 的一个工具对 Halcogen 合规性进行了评估。  但是、我认为我上面给出的示例非常简单、如果使用任何工具、这将是违规行为、不是吗?

如果无法通过我们自己的 CCS 检查、用户如何对 Halcogen MISRA 合规性充满信心?

还有其他建议/意见吗?

----

更新:我看到 PTR++代码行在代码注释中似乎引用了一个弃权声明:

"./source/adc.c "、第446行:警告#1476-D:(MISRA-C:2004 17.4/R)数组索引应是唯一允许的指针算术形式

还可以。  但还有其他警告、我无法理解。  例如:

返回 ADC->EVTIN

"./source/adc.c "、第856行:警告#1423-D:(Misra-C:2004 17.6/R)不应将具有自动存储的对象的地址分配给在第一个对象停止存在后可能保留的另一个对象("ADC")


我看不到自动 var 的地址被分配给持久性对象的位置。  代码行将值返回到调用函数。

----

谢谢、此致、

David

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

    MISRA-C 是一个奇怪的标准,因为每个项目都有适应的空间。 即、可以包含或排除某些规则。 我不确定 CCS 是否能够进行这些自定义以防止出现警告。 MISRA-C 的全量程实现确实包括这种可配置性、并且其精度和效率普遍被接受。 如上所述、LDRA 是这些类型的工具之一、就我所知、它在 CCS 实现方面的可用性水平远远高于它们。

    Prathap 在解释为何对于 SIL 或 ASIL 等级的项目、不建议使用 MISRA-C 检查的 CCS 实现方案方面做得很好。 此外、由于 Halcogen 团队采用了一组特定的规则、并在指南中排除了某些规则以及 MISRA-C 工具的可接受使用、他还很好地解释了为什么某些工具可能返回错误消息或警告。 我已经复制了我们当前的 HalcogGen 所有者、以防有其他需要其他文档的问题。

    以下是 Prathap 已回答您提供的相同问题的帖子的链接: e2e.ti.com/.../589595
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    卡盘、

    感谢您的回答。  但是、我仍然在为此而挣扎。  我尝试挖掘几个警告。  一些所谓的违规行为在代码源中有"已批准"的评论。  其他则不会。  我之前引用的 MISRA-C:2004 17.6/R 违规似乎是编译器错误(不应出现警告)。  但还有其他看起来合法的警告。  例如,只有 一个函数才能访问具有静态限定符(即范围仅限于该源文件)的全局 var 声明。  MISRA-C:2004 8.7/R 违规发生:

     (MISRA-C:2004 8.7/R)如果对象只能从单个函数内访问、则应在块范围内定义

    违反行为似乎有效、并且消息来源中没有关于这是已批准的点火器的评论。

    在您引用的 Prathap 的帖子中、他说他有一个文档、详细介绍了 Halcogen 如何处理规则、他主动提出与海报分享。  我可以获取该文档吗?

    谢谢、

    David

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

    尊敬的 David:

    我理解您的顾虑。 我正在复制当前的 Halcogen 所有者 Veena、以便她可以对您的问题作出回应和/或通过电子邮件直接发送所引用的文档 Prathap。

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

    尊敬的 David:

    您能告诉我是哪家客户要求它吗? 我不确定是否可以在论坛上分享该文件。 我将与我的经理核实、然后再联系您。

    谢谢、此致、

    Veena

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

    Venna、Chuck、

    感谢您提供本文档。  遗憾的是、存在无法解释的 MISRA 警告。  我已附加文件 adc.c、该文件是为使用 Halcogen 04.06.00的新项目生成的。

    e2e.ti.com/.../6763.adc.c

    使用 TI ARM 编译器 v16.9.3.LTS 编译此文件时、我会收到有关以下 MISRA 规则的警告:

    19.4/R (3次)-您发送的文档表示 Halcogen 的全面放弃处理

    20.1/R (1次)-代码注释表示批准的豁免为20.2/R  20.1和20.2是非常相似的规则、因此我将用粉笔来解释编译器 MISRA 检查、LDRA MISRA 检查和代码注释之间的差异。

    17.4 (2次)-您发送的文档表明 Halcogen 逐案处理弃权声明

    17.6 (3次)-这看起来是编译器错误、错误地给出警告

    8.7 (1次)-我无法解释这个:

    第211行声明了一个具有文件作用域的静态常量、但它只能由单个函数访问:

    静态常量 UINT32 s_adcSelect[1U][3U]=

      (笑声)

    TI 编译器 会抛出以下 MISRA 警告、这似乎是合理的:

    "../source/adc.c、第211行:警告#1387-D:(MISRA-C:2004 8.7/R)对象如果只能从单个函数(变量"s_adcSelect")中访问、则应在块范围内定义

    根据您发送的电子表格、Halcogen 应将 MISRA-C:2004 8.7/R 视为强制性要求、并在所有实施中都得到遵守。

    ***我们如何解释这一点?

    以上分析仅针对由 Halcogen 生成的单个源文件进行。  我怀疑其他文件会产生类似的结果。

    谢谢、此致、

    David

     

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

    [引用 user="David M. Alter"]17.6 (3次)-这似乎是一个编译器错误、错误中会给出警告[/quot]这可能与未解决的错误 CodeGen-1639存在相同的问题、 对于该问题、错误:错误17.6中有一个测试案例:ARM 编译器错误报告了 MISRA-C 规则。也许您应该在编译器论坛上发帖进行确认。

    在这两种情况下、17.6警告似乎都是由函数取消引用作为参数传递的结构中的字段而触发的。

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

    尊敬的 David:

    为了跟进此主题的完整性、与 SW 团队的讨论将带来以下理解/陈述。

    通过 Halcogen 生成的代码并不完全符合 MISRA-C 标准。 已尽一切努力在合理范围内遵守、但在某些情况下、需要对驱动程序进行重新设计以实现合规性、从而决定是否满足由于资源和工作量限制而出现的例外情况。 在大多数情况下、试图在代码或 CSP 中添加注释和解释以识别这些例外;但是、仍有一些案例未记录这些例外情况。

    由于这对 TI 和我们的客户都很困难、因此这是软件开发现状的现实。 我们将继续评估这种情况的影响、并确定可以改进软件相关配套资料的任何方式、以提供对每种违规行为的完整解释、但目前尚未确定具体更新的计划。