Я проверяю стандарт MISRA C: 2012 для своего кода MCU, используя PC-Lint.
Я получил следующие ошибки. Здесь я разместил пример кода, где я получил ошибки в операторах условия.
1] целочисленный литерал без знака без суффикса 'U' [MISRA 2012, правило 7.2, обязательно] S_LCB_100,
2] побочные эффекты на правой руке логического оператора, '&&' [MISRA 2012, правило 13.5, обязательно]
while ((0x00000000! = List [Loop]) && (0! = Counter))
3]: значение со знаком и значение без знака не могут использоваться вместе как операнды! = [Требуется MISRA 2012, правило 10.4]
while ((0x00000000! = List [Loop]) && (0! = Counter))
4]: значение со знаком и значение без знака нельзя использовать вместе как операнды! = [MISRA 2012, правило 10.4, обязательно] while ((0x00000000! = List [Loop]) && (0! = Counter))
5] значение без знака и значение со знаком нельзя использовать вместе как операнды для == [Требуется правило 10.4 MISRA 2012] if (List [Loop] == 0x00000000)
Как мне обеспечить соответствие требованиям MISRA C: 2012?
typedef unsigned char UINT8;
typedef unsigned char BYTE;
typedef unsigned long int UINT32;
#define S_LCB_100 0xF0BB12DE;
#define MULTI 0x1A;
volatile static BYTE Counter = 0;
static UINT8 Loop = 0;
static UINT32 List[]=
{
S_LCB_100,
0x00000000,
};
while(( 0x00000000 != List[Loop] ) && ( 0 != Counter ))
{
.......some code
}
if ( List[Loop] == 0x00000000 )
{
.....some code
}