Forum: Mikrocontroller und Digitale Elektronik Keil µVision Code-Checker


von Markus (Gast)


Lesenswert?

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

von Marcus H. (mharnisch) Benutzerseite


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/

von Markus (Gast)


Lesenswert?

Scheint nicht gerade kostengünstig zu sein. Gibt es ein solches Tool 
evtl. als Freeware Version?

von Marcus H. (mharnisch) Benutzerseite


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/

von Christian H. (blueicehaller)


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

von Christian H. (blueicehaller)


Lesenswert?

(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

von Christian H. (blueicehaller)


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

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.