Forum: Mikrocontroller und Digitale Elektronik Parse Error bei MISRA check


von Tom (Gast)


Lesenswert?

Hallo Zusammen,

ich versuche gerade über meinen C-Code einen MISRA-Check laufen zu 
lassen.
1
#define Makro(port,pin)    ((port*PIN_PER_PORT)+((uint8_t)pin))
2
3
typedef enum
4
{
5
      Name1 = Makro(PORT_B, 1u),  
6
      Name2 = Makro(PORT_B, 2u),  
7
      Name3 = Makro(PORT_B, 4u), 
8
.....
Leider bekomme ich beim Analysieren einen Parse-Error "Unexpected 
Token". Mehr Infos gibt der Fehler nicht her.

Der Code an sich funktioniert und ist schon länger im Einsatz.

Ich bekomm den Fehler weg, wenn ich beim ERSTEN Enum-Element einen 
Festwert hinschreibe. Mit Makro kommt dieser Fehler. Dabei ist egal 
welches Enum-Element als erstes da steht.

Hat wer noch eine Idee?

Mit freundlichen Grüßen und Danke

von Markus K. (markus-)


Lesenswert?

Hast Du Dir mal den Output vom Präprozessor angeschaut?

von Error bei MI (Gast)


Lesenswert?

Grundsätzlich mal jedes Vorkommen eines Arguments im Ersatztext 
klammern,
unabhängig von MISRA.

von Karl H. (kbuchegg)


Lesenswert?

Tom schrieb:

> Hat wer noch eine Idee?

Kriegst du auch den Fehler, wenn du selbst erst mal Präprozessor spielst 
und die Makrosubstitution machst?
1
#define Makro(port,pin)    ((port*PIN_PER_PORT)+((uint8_t)pin))
2
3
typedef enum
4
{
5
      Name1 = ((PORTB*PIN_PER_PORT)+((uint8_t)1u)),
6
      Name2 = Makro(PORT_B, 2u),
7
      Name3 = Makro(PORT_B, 4u),
8
.....

Wenn ja: dann teil das in mehrere Zeilen auf
1
      Name1 = (
2
               (
3
                PORTB
4
                *
5
                PIN_PER_PORT
6
               )
7
               +
8
               (
9
                 (uint8_t)
10
                 1u
11
               )
12
             ),
13
...

und achte auf die Zeilennummer des Fehlers. Bei welchem Bestandteil 
kracht es? Wenns nicht mehr kracht, dann sukzessive (und in Schritten) 
die einzelnen Zeilen wieder in die ursprüngliche Form bringen, bis es 
kracht.

-> Mitteilung an den Hersteller deines Checkers, dass er einen Fehler im 
Code hat. Über dein Minimalbeispiel, mit dem er das nachvollziehen kann 
wird er sich freuen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.