Я написал следующий кусок кода, который 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: Я использую QAC 7 с MISRA 2004 – m47h