2016-04-07 15 views
1

Ich verwende MPLAB X (3.26) mit einem PIC32 auf Windows (XC32 v1.40 Compiler). Ich versuche, Schiene zu verwenden, um statische Code-Analyse auf jemandes Code als Teil einer Überprüfung durchzuführen. Ich habe die meisten Compiler definiert und Suchpfade sortiert, aber sind ein bisschen ratlos, wenn es darum geht, die Parse-Fehler in den PIC32-Standard-Include-Dateien zu vermeiden.Verwenden von Schiene für statische Code-Analyse auf Windowms mit MPLAB, wie Systemdateianalyse Fehler zu vermeiden

Der Befehl I Schiene laufen bin mit ist

splint^
-D"__32MX370F512L__"^
-D"__PIC32_FEATURE_SET__"=370^
-D"__LANGUAGE_C__"^
+I"C:/Program Files (x86)/Microchip/xc32/v1.40/pic32mx/include/"^
main.c 

Der Ausgang dann gibt

< Location unknown >: Field name reused: 
Code cannot be parsed. For help on parse errors, see splint -help 
parseerrors. (Use -syntax to inhibit warning) 
< Location unknown >: Previous use of 
< Location unknown >: Previous use of 

.... approx 100 times then... 

C:\Program Files (x86)\Microchip\xc32\v1.40\pic32mx\include\\stddef.h(4,18): 
Datatype ptrdiff_t declared with inconsistent type: long int 
A function, variable or constant is redefined with a different type. (Use 
-incondefs to inhibit warning) 
load file standard.lcd: Specification of ptrdiff_t: arbitrary integral type 
C:\Program Files (x86)\Microchip\xc32\v1.40\pic32mx\include\\stddef.h(5,27): 
Datatype size_t declared with inconsistent type: unsigned long int 
load file standard.lcd: Specification of size_t: 
arbitrary unsigned integral type 
C:\Program Files (x86)\Microchip\xc32\v1.40\pic32mx\include\\stddef.h(6,13): 
Datatype wchar_t declared with inconsistent type: int 
load file standard.lcd: Specification of wchar_t: arbitrary integral type 
C:\Program Files (x86)\Microchip\xc32\v1.40\pic32mx\include\\stdarg.h(75,36): 
No type before declaration name (implicit int type): __builtin_va_list : 
int 
A variable declaration has no explicit type. The type is implicitly int. 
(Use -imptype to inhibit warning) 
C:\Program Files (x86)\Microchip\xc32\v1.40\pic32mx\include\\stdarg.h(75,36): 
Parse Error: Suspect missing struct or union keyword: __builtin_va_list : 
int. (For help on parse errors, see splint -help parseerrors.) 
*** Cannot continue. 

Die letzte verursacht Dinge zu stoppen. Ich habe Dinge wie -skip-iso-Header ohne Glück versucht. Es scheint, es wird Probleme mit seiner standard.lcd-Datei und die xc32 std Dateien sehen

Kann mir jemand sagen

  • Was die < Location unknown >: Field name reused: Mittel oder möglicherweise bezieht?
  • Eine Möglichkeit, den Parse-Fehler aufgrund der Std-Header-Dateien zu lösen?

Bis jetzt nur Möglichkeit, das Headerdateiproblem zu lösen, ist, die Typen zu definieren, z.

-D"__builtin_va_list"=int^
+0

editierte Frage ein Weg, um vorbei an den Parse-Fehler – spitz

Antwort

0

Ich denke, Ihr Code (oder ein Code, den Sie # include) anonym bitfields oder/und structs verwendet. Anonyme Strukturen und anonyme Verbindungen werden von einer GNU extension für Versionen von C früher als C11 bereitgestellt. Da Splint nichts über C11 weiß (ich habe nur Erwähnungen von C99 in manual und googleagrees gefunden) und only partial support for the GNU extensions (suche nach gnu-extensions), ist es sehr schwierig, sie zu analysieren.

Ich hatte ein ähnliches Problem mit etwas Code für eine PIC18f46k22 geschrieben, obwohl ich sdcc anstelle von XC8 verwendet.

Das Problem war mit pic18f46k22.h, die anonyme Strukturen (Bitfelder, speziell) innerhalb einer typedef Union hatte.

Dieser Code ...

typedef union 
    { 
    struct 
    { 
    unsigned name0    : 1; 
    unsigned name1    : 1; 
    unsigned name2    : 1; 
    unsigned name3    : 1; 
    unsigned name4    : 1; 
    unsigned     : 1; 
    unsigned     : 1; 
    unsigned     : 1; 
    }; 

    struct 
    { 
    unsigned name    : 6; 
    unsigned     : 2; 
    }; 
    } __NAMEbits_t; 

... diese Fehler ...

< Location unknown >: Field name reused: 
Code cannot be parsed. For help on parse errors, see splint -help 
parseerrors. (Use -syntax to inhibit warning) 
< Location unknown >: Previous use of 

... aber dieser Code erzeugen würde, würde nicht.

struct indv 
    { 
    unsigned name0    : 1; 
    unsigned name1    : 1; 
    unsigned name2    : 1; 
    unsigned name3    : 1; 
    unsigned name4    : 1; 
    unsigned     : 1; 
    unsigned     : 1; 
    unsigned     : 1; 
    }; 
    struct all 
    { 
    unsigned name    : 6; 
    unsigned     : 2; 
    }; 

    typedef union 
    { 
    struct indv individualbits; 
    struct all allbits; 
    } __NAMEbits_t; 
+0

Vielen Dank für diese gefunden zu zeigen, sind Sie wahrscheinlich recht, leider Unternehmen bewegt, um den Code nicht mehr zugreifen kann, um zu bestätigen ... – spitz