有关Misra规则11.6的查询(MISRA C:2012)

Kan*_*oja 3 c misra

我无法在此行中解决米斯拉规则11.6警告:

uint32_t * delay = (uint32_t *)0x40086D0C ;
Run Code Online (Sandbox Code Playgroud)

[ 仅供参考: typedef long unsigned int uint32_t;]

PC-Lint:注释923:从int转换为指针[MISRA 2012 Rule 11.6,必填]

我做了什么:

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

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

Lun*_*din 5

皮棉一如既往地破碎。提交错误报告或仅卸载Lint。

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

关于整数到指针的转换,有一个咨询规则11.4。该规则的目的是捕获这种类型的转换会导致指针对齐不正确的情况。但是,您可以忽略规则11.4,而不会引起偏差,因为它是建议性的。

因此,除了咨询规则外,您的代码还符合MISRA的要求,尽管您需要在整数常量后附加一个U后缀,以便确定其他规则:

uint32_t* delay = (uint32_t*)0x40086D0Cu ;
Run Code Online (Sandbox Code Playgroud)

并且指针最有可能是volatile uint32_t*为了使此代码有意义。