Page 1 of 1

MISRA 6.1 with enum

Posted: Mon May 12, 2014 9:51 am
by ziomocci
Hi guys,

I am encountering some problems trying to make MISRA 6.1 compliant my source code,
expecially using enumeration.

From one side, in the header file I declare:
typedef enum { FALLING_EDGE = 0x0, RISING_EDGE } t_EdgePolarity;

and from the other side, in the code I declare:
emios_error_t EMIOS_PIN_Config(t_PIO_CHANNELS _channel,
t_BusSelect _bsl,
t_EdgeSelection _edgesel,
t_EdgePolarity _edgepol,
t_ActiveFilter _filter)
{
... ... ... ... ... ...
/* Do somthing */
switch (_edgepol)
case FALLING_EDGE:
/* Do somthing */
break;
case RISING_EDGE:
/* Do somthing */
break;
default:
/* Do somthing */
break;
... ... ... ... ...
}
At compile time, green hills 5.1.6 compiler gives back this error message:
MISRA 2004 Rule 6.1:
only assignment and equality operators may be used on plain char
operand
switch (_edgepol)
^
It is only an example, but I have same error with all the enumeration used in
the code.

Any suggestions?

Thank you in advance,

Andrea Mocci, embedded SW developer @ Akhela s.r.l.

Re: MISRA 6.1 with enum

Posted: Thu May 15, 2014 7:17 pm
by ziomocci
Resolved using GHS compiler option:

Code: Select all

--no_short_enum
Regards,

Andrea Mocci, embedded SW developer @ Akhela s.r.l.

Re: MISRA 6.1 with enum

Posted: Fri Jun 06, 2014 8:17 am
by misra-c
If the switch control expression is an object of enum type and the switch case expressions are constants of the same enum type, there is no MISRA violation.