我已经写了下面的代码段,其MISRA不喜欢:米斯拉违反与位运算符
UartPtr->C &= ((uint8_t)(~SIO_C2_SBK));
与
#define SIO_C2_SBK ((uint8_t)0x01u)
和UartPtr
被定义为
UartPtr = (UartStruct*) 0x12345678; /* I know that this is also a violation of MISRA */
与基础数据结构:
typedef volatile struct UartStructTag
{
uint8_t BDH;
uint8_t BDL;
uint8_t C1;
uint8_t C2;
} UartStruct;
我米斯拉检查抱怨的第一行和状态,即具有负值
一个整数常量表达式被转换 为无符号类型。
但是,下面的行不生成与MISRA一个问题:
UartPtr->C |= ((uint8_t)(SIO_C2_SBK));
所以,问题来自于按位否定。但是,由于所有操作都直接转换为uint8_t,因此我不会违反MISRA标准。谁想帮我这里?
好吧,'〜SIO_C2_SBK'是一个负值,所以这个消息是事实准确的。 –
什么版本的MISRA?你使用哪种工具? – Lundin
@Lundin:我在MISRA 2004中使用QAC 7 – m47h