Ich suche nach einem kostenlosen statischen Prüfer für C99-Code (einschließlich GCC-Erweiterungen) mit der Fähigkeit, explizit zu sagen: “Diese Präprozessormakros sind immer definiert.”
Ich brauche diesen letzten Teil, weil ich eingebetteten Code für einen einzelnen Zielprozessor kompiliere. Der Compiler (C32 von Microchip, GCC-basiert) setzt ein Makro basierend auf dem ausgewählten Prozessor, das dann in den PIC32-Header-Dateien verwendet wird, um eine einzuschließende prozessorspezifische Header-Datei auszuwählen. cppcheck schlägt daher fehl, weil es die 30 anders erkennt #ifdef
s verwendet, um einen der vielen möglichen PIC32-Prozessoren auszuwählen, versucht, alle möglichen Kombinationen dieser plus aller anderen zu analysieren #define
s und scheitert.
Zum Beispiel, wenn Schiene C99-Code verarbeiten könnte, würde ich verwenden
splint -D__PIC32_FEATURE_SET__=460 -D__32MX460F512L__ \
-D__LANGUAGE_C__ -I/path/to/my/includes source.c
Ein zusätzliches Problem ist, dass der PIC32-Toolchain-Compiler aufgerufen wird pic32-gcc
und nicht nur gcc
obwohl ich noch nicht an dem Punkt angelangt bin, an dem ich dies berücksichtigen muss.
Update Nr. 1 – Eine Sache, die mich interessiert, aber orthogonal zu dieser Frage ist, ist die Eclipse-Integration (es wäre schön, kein Makefile für mehr als 30 Kompilierungseinheiten schreiben zu müssen). Ich fragte danach auf der Eclipse-Foren (obwohl die Diskussion dort mehr über die Integration in Eclipse geht). Nichts Bahnbrechendes.
Update Nr. 2 – gerade versucht scan-build
aus klirrenmit:
scan-build --use-cc=/usr/local/bin/pic32-gcc make -B -k all
…(auch ohne die --use-cc
Flag), aber alles, was ich bekam, war die typische Build-Ausgabe, ein Beispiel dafür ist:
Building file: ../src/MoreMath.c
Invoking: PIC C32 C Compiler
pic32-gcc -D__DEBUG -I/usr/local/pic32-libs/include -O0 -Wall -c -fmessage-length=0 -std=gnu99 -Werror-implicit-function-declaration -MMD -MP -MF"src/MoreMath.d" -MT"src/MoreMath.d" -mprocessor=32MX460F512L -D__DEBUG -g -o"src/MoreMath.o" "../src/MoreMath.c"
Finished building: ../src/MoreMath.c
…und am Ende:
Building target: MyBinary.elf
Invoking: PIC C32 C Linker
pic32-gcc -Wl,-Map,MyBinary.map -mprocessor=32MX460F512L --defsym=__MPLAB_DEBUG=1 -o"MyBinary.elf" <<ALL OF MY *.o FILES HERE>>
Finished building target: MyBinary.elf
scan-build: Removing directory '/tmp/scan-build-2010-06-21-1' because it contains no reports.
Also entweder mein Code ist perfekt nach scan-build
, oder es tut nichts. Ich bin mir nicht sicher, was ein guter Test sein könnte, um zu sehen, ob es funktioniert.
Sie sollten Ihrer Frage Ihre Bestimmung hinzufügen, die in Eclipse verwendet werden soll, wenn dies tatsächlich eine Anforderung für Ihre Lösung ist.
– mbauman
21. Juni 2010 um 1:37 Uhr
Nein, es wäre ein zusätzlicher Bonus. Ich werde die Frage bearbeiten, um das klarer zu machen. Ich arbeite immer noch daran, es zu bekommen
scan-build
mit der PIC32-Toolchain zu arbeiten, und wenn ich das tue, akzeptiere ich die Antwort unten.– dezent
21. Juni 2010 um 1:52 Uhr
@Adam Davis – Ich wollte die Frage optimieren, um meine Verwendung der PIC32-Toolchain besser hervorzuheben, aber ich weiß nicht, ob dies Ihre Motivation zum Aufstellen eines Kopfgeldes beeinträchtigen wird. Sag Bescheid, wenn ich warten soll.
– dezent
21. Juni 2010 um 4:58 Uhr
Hallo, ich möchte keine Off-Topic-Frage stellen, aber ich bin sehr neugierig. Warum sollte jemand einen Mikrochip programmieren wollen? Was baust du? Vielen Dank..
– der Mechaniker_
27. Juni 2010 um 23:46 Uhr
Der Mikrochip ist Teil des Steuersystems einiger elektronischer Geräte. Sie sind fast vollständig automatisch, sodass die Bedingungen über integrierte Sensoren (und die wenigen Eingänge) überwacht und verschiedene Peripheriegeräte angepasst werden, um bestimmte Betriebszustände aufrechtzuerhalten.
– dezent
28. Juni 2010 um 0:16 Uhr