Eingebettetes System LINT-Verwendung

Ich entwickle derzeit eingebettete Systeme mit einer Reihe verschiedener Compiler, von denen die häufigsten von IAR-Systemen stammen.

Meine Liebe zur Hardware ist der Antrieb für eingebettete Systeme und Firmware. Mir scheint jedoch einiges an Software-Engineering zu fehlen.

Ich habe oft gelesen, dass ein guter Lint für Code von unschätzbarem Wert ist. Ich würde gerne wissen, ob hier jemand einen Lint verwendet, um welchen Lint es sich handelt und wie sehr er beim Erkennen von Fehlern hilft.

Antworten (3)

Ich habe in der Vergangenheit Fussel verwendet, und ich fand es nützlich. Ich musste jedoch aufhören, es zu verwenden, als ich zu einem größeren Projekt überging, das es nicht verwendete. Das machte es schwierig, Lint zu verwenden, da der Code so eng miteinander verbunden war. Das größte Problem mit Lint besteht darin, es so zu konfigurieren, dass es falsche Positive entfernt und sich nicht darum kümmert. Es ist jetzt vielleicht besser, dass sie im vergangenen Jahr eine weitere Veröffentlichung herausgebracht haben.

Ein Unternehmen, mit dem ich zusammenarbeite, hat dieses große Projekt übernommen und es dem statischen Analysator von Coverity unterzogen. Das ist jedoch ein großer Batzen Geld, das verwendet werden muss, daher wird es nicht für kleine Unternehmen empfohlen.

Ich habe gelesen, dass ich damit rechnen muss, Vorlaufzeit aufzuwenden, damit es keine Fehlalarme mehr ausgibt. Für welche Flusen hast du dich damals entschieden?
Damals war es die Version 8.0.
Wissen Sie, welche Firma es hergestellt hat, es gibt viele verschiedene Lint-Programme da draußen. Mir wurde gesagt, dass es lint heißt, weil es kleine Flusenstücke findet, die der Compiler vermisst.
Entschuldigung, Gimpels PC-LINT. Das Schöne ist, dass sie Ihnen zumindest helfen, die Ausgabe mit einigen vordefinierten Regelsätzen zu zähmen, die auf dem von Ihnen verwendeten Compiler und Editor basieren. Sie können auf ihrer Website heruntergeladen werden: gimpel.com
Wenn Ihre neue Quellcodebasis viele "False Positives" ausspuckt, ist sie leider normalerweise kaputt.
Wie wahr. Diese große Codebasis ist ziemlich fehlerhaft, und wir versuchen, die Coverity-Fehler darin zu beseitigen

Ich habe lint nicht verwendet, aber ich finde, dass die Warnungen von GCC viele Programmierfehler erkennen können.

Hier sind meine bevorzugten CFLAGS

CFLAGS += -Werror -W -Wall -ansi -pedantic -Wformat-nonliteral -Wcast-align -Wpointer-arith -Wbad-function-cast -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -Winline -Wundef -Wnested- externs -Wshadow -Wconversion -Wwrite-strings -Wno-conversion -Wextra -Wstrict-aliasing -Wcast-qual

Ich habe mich auch mit Linus Torvalds Sparse für die statische Analyse beschäftigt. Aber ich denke, diese Art von Tools sind nützlicher für große Systeme.

Die meisten Systeme, mit denen ich arbeite, liegen im Bereich von 50.000 Codezeilen.

Ich muss zugeben, dass ich bei einem Mikrocontroller/Mikroprozessor-Projekt nicht viel mit irgendwelchen Fusseln zu tun hatte.

Bei meinem aktuellen Embedded-Projekt, das C++ auf einem Linux-basierten PC/104 SBC verwendet, haben wir cppcheck verwendet (funktioniert auch mit C!). Es funktioniert ziemlich gut, obwohl es Probleme mit komplizierten Klassenvererbungsbäumen gibt. Und es hat einen gewissen Wert geliefert - es ist gut, um nach potenziellen Orten zu suchen, an denen Speicherlecks auftreten könnten. Aber die meisten Dinge, die es bemerkte, waren stilistisch - verwenden Sie in for-Schleifen preincrement statt postincrement, so etwas.

Bei der Entwicklung von Anwendungen für ein Unternehmenssoftwaresystem habe ich auch einen Online-Lint für Javascript verwendet. Es war dort absolut unschätzbar, da es keine Debugging-Tools gab, um in diesem Setup nach Syntaxfehlern zu suchen.