我有以下代码部分:
----------header---------------------
typedef volatile struct REG_Base{
a;
b;
}REG_t
#define address (0xFFF45556)
------------------------------------
--------Source-----------------------
LOCAL REG_t *pToREG;
pToREG= (REG_t *) address;
-------------------------------------
我在最后一行得到了MISRA消息" 在指向易失性对象的指针和整数类型"之间。
知道如何避免这条消息吗?
THX!
答案 0 :(得分:3)
MISRA有一条禁止从整数到指针的强制转换的顾问规则。理由是它们关注的是在整数不能表示指针的情况下或者在未对齐的情况下涉及的定义不明确的行为。
这是一个过于迂腐的规则,它只是建议性的。大多数嵌入式系统都会偏离规则。
话虽如此,您的代码包含一些可疑的内容:
a
和b
声明没有任何意义,它们是某些丑陋的宏吗? 另请注意,MISRA要求将整数常量写为0xFFF45556u
。这不是一个坏主意,因为0xFFF45556
的类型为unsigned int
,而例如0x7FFFFFFF
的类型为signed int。除非您小心,否则这些事情可能会导致与隐式类型促销相关的微妙错误。