Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
MISRA 6.1 with enum
#1
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.
<t></t>
Reply
#2
Resolved using GHS compiler option:

Code:
--no_short_enum

Regards,

Andrea Mocci, embedded SW developer @ Akhela s.r.l.
<t></t>
Reply
#3
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.
Posted by and on behalf of the MISRA C Working Group
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)