我有以下代码部分:
----------header---------------------
typedef volatile struct REG_Base{
a;
b;
}REG_t
#define address (0xFFF45556)
------------------------------------
--------Source-----------------------
LOCAL REG_t *pToREG;
pToREG= (REG_t *) address;
-------------------------------------
Run Code Online (Sandbox Code Playgroud)
我在最后一行看到了 MISRA 消息“在指向易失性对象的指针和整数类型之间进行转换”。
知道如何避免此消息吗?
谢谢!
MISRA 有一个建议规则,禁止从整数转换为指针。其基本原理是他们关注在整数不能表示指针的情况下或在未对齐的情况下所涉及的定义不明确的行为。
这是过于迂腐的规则之一,它只是建议性的。大多数嵌入式系统都会偏离规则。
话虽如此,您的代码包含一些有问题的东西:
a
和b
声明没有任何意义,他们是某种丑陋的宏?另请注意,MISRA 要求将整数常量写为0xFFF45556u
. 这不是一个坏主意,因为0xFFF45556
is 是 type unsigned int
,而例如0x7FFFFFFF
是 signed int 类型。除非您小心,否则这些事情可能会导致与隐式类型提升相关的细微错误。