我已經寫了下面的代碼段,其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