MISRA Discussion Forums
MISRA 6.1 with enum - Printable Version

+- MISRA Discussion Forums (https://forum.misra.org.uk)
+-- Forum: MISRA C (https://forum.misra.org.uk/forumdisplay.php?fid=4)
+--- Forum: MISRA-C: 2004 rules (https://forum.misra.org.uk/forumdisplay.php?fid=17)
+---- Forum: 6.6 Types (https://forum.misra.org.uk/forumdisplay.php?fid=33)
+---- Thread: MISRA 6.1 with enum (/showthread.php?tid=1055)



MISRA 6.1 with enum - ziomocci - 12-05-2014

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 - ziomocci - 15-05-2014

Resolved using GHS compiler option:

Code:
--no_short_enum

Regards,

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


Re: MISRA 6.1 with enum - misra-c - 06-06-2014

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.