Hey, ich habe von einem Tool für Keil's µVision gehört, dass mein C-code analysiert. Es werden z.B. ungenutze Funktionen gefunden. Desweiteren soll dieses Tool auch herausfinden ob sich Schleifen irgenwo aufhängen. Hat jemand eine Idee? mfg Markus
Markus schrieb: > ich habe von einem Tool für Keil's µVision gehört, dass mein C-code > analysiert. Meinst Du PC-lint (www.gimpel.com)? Das ist nicht "für µVision". Man kann es aus µVision (aber auch von der Kommandozeile, z.B. Makefile) starten. Der Aufruf ist ähnlich zu dem eines Compilers. Es gibt sogar eine Art Objekt Datei, um über die Grenzen einer Compile Unit analysieren zu können. Ob es generell Schleifen analysiert kann ich nicht sagen. Gut möglich, solange das statisch zu ermitteln ist:
1 | while (1) { |
2 | if (1 == 0) |
3 | break; |
4 | }
|
PC-lint ist quasi Standard für derartige Tools in der Embedded Software Welt. Gruß Marcus http://www.doulos.com/arm/
Scheint nicht gerade kostengünstig zu sein. Gibt es ein solches Tool evtl. als Freeware Version?
Splint (http://www.splint.org/), kommt aber nicht an die Fähigkeiten von PC-lint heran. Wenn Du Dir Keils tools leisten kannst, dann sollten die paar Kröten für PC-Lint auch noch drin sein ;-) RTL-check (http://rtlcheck.sourceforge.net/). Bin aber nicht sicher, wie der Entwicklungsfortschritt ist. Der aktuelle Zustand ist wohl eher proof-of-concept. Bei Splint ist nach langer Pause wenigstens mal wieder was passiert. Gruß Marcus http://www.doulos.com/arm/
Hallo, ich möchte meinen C-Code überprüfen lassen. µVision3/LPC23xx verwendet Compilerspezifische Anweisungen die Splint nicht kennt. Auch Unterstriche, Konstanten, ... Aus der io.h
1 | void ISR_EINT_0_Handler (void) __irq; |
1 | Parse Error: New function scope inside function. (For help on parse errors, see splint -help parseerrors.) |
2 | *** Cannot continue. |
Ein Bekannter hat mir gesagt ich soll folgende Parameter versuchen:
1 | splint -strict *.c > splint_report.log |
Und später jede c Datei einzeln:
1 | splint -checks -Dfar= -Dnear= io.c > splint_io.log |
(Wie) Können Schlüsselwörter ignoriert werden? Zitat übersetzt: __irq Das __irq Schlüsselwort ermöglicht die C oder C++ Funktion als interrupt routine zu nutzen. __irq ist ein Funktionskennzeichner. Er beeinflusst den Typ/die Art der Funktion. Quelle: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0376c/BABICJBC.html
Multiposting: Beitrag "Re: Wie benutzt man Lint?!" Ich glaube ich habs jetzt verstanden. Ich habe meine Header Datei wie folgt geändert:
1 | #ifndef __SPLINT__ |
2 | void ISR_EINT_0_Handler (void) __irq; |
3 | #endif |
4 | |
5 | #ifdef __SPLINT__ |
6 | void ISR_EINT_0_Handler (void); |
7 | #endif |
Oder optimiert:
1 | #ifndef __SPLINT__ |
2 | void ISR_EINT_0_Handler (void) __irq; |
3 | #else |
4 | void ISR_EINT_0_Handler (void); |
5 | #endif |
Allerdings ist dann nicht klar ob Splint diese Funktion als Interrupt nutzt, der Sinn von __irq verloren geht. Möglicherweise gibt es alternative Anweisungen um Splint mitzuteilen diese Funktion als Interrupt zu nutzen ist. http://www.cs.virginia.edu/pipermail/splint-discuss/2007-August/001023.html
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.