Я написал следующий фрагмент кода, который не нравится 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 жалуется на первую строчку и констатирует, что
Целочисленное константное выражение с отрицательным значением преобразуется в тип без знака.
Однако следующая строка не вызывает проблем с MISRA:
UartPtr->C |= ((uint8_t)(SIO_C2_SBK));
Таким образом, проблема возникает из-за побитового отрицания. Но так как все операции напрямую приводятся к uint8_t, я не вижу нарушения стандарта MISRA. Кто хочет помочь мне здесь?
~SIO_C2_SBK
— отрицательное значение, так что сообщение фактически верно. - person M.M   schedule 02.12.2015