Keil µVision Code-Checker

Persönliche Seite #1280018
Lesenswert?

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/
Persönliche Seite #1280112
Lesenswert?

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/
#2516395
Lesenswert?

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
#2518037
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren