gpt4 book ai didi

c - 关于 Misra 规则 11.6 的查询 (MISRA C :2012)

转载 作者:行者123 更新时间:2023-12-02 04:18:12 25 4
gpt4 key购买 nike

我无法解决此行中的 Misra 规则 11.6 警告:

uint32_t * delay = (uint32_t *)0x40086D0C ;

[仅供引用: typedef long unsigned int uint32_t;]

PC-Lint : Note 923: cast from int to pointer [MISRA 2012 Rule 11.6, required]

我做了什么:

  • 显式类型转换,但不起作用
  • 使用 memset(),它可以工作,但这不是解决 Misra 警告的正确方法。因为这会增加系统不必要的函数调用,并且可能会降低系统性能。

您能否分享关于我的问题的有用想法?我们将不胜感激。

最佳答案

Lint 一如既往地损坏。提交错误报告或直接卸载 Lint。

MISRA-C:2012 规则 11.6 涉及从 void 指针到算术类型指针的转换!因此,“从 int 转换为指针 [MISRA 2012 规则 11.6,必需]”是不正确的废话,与所引用的规则无关,他们错误地引用了该规则。

有关于整数到指针转换的建议规则 11.4。该规则的目的是捕获此类强制转换会导致指针对齐不正确的情况。不过,您可以忽略规则 11.4,而不会引发偏差,因为它是建议性的。

因此,除了咨询规则之外,您的代码还符合 MISRA 标准,尽管您需要在整数常量后附加 U 后缀来满足其他规则:

uint32_t* delay = (uint32_t*)0x40086D0Cu ;

为了使这段代码有意义,指针很可能应该是 volatile uint32_t*

关于c - 关于 Misra 规则 11.6 的查询 (MISRA C :2012),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41032719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com