Derzeit arbeite ich an einem Embedded-Projekt. Ich benutze IAR Embedded Workbench IDE und Zielplattform ist 8051-basierten Mikrocontroller. Ist es möglich Valgrind Tool zu verwenden, um den Code zu überprüfen, den ich schrieb?Verwenden von Valgrind auf einem Embedded-Projekt
Antwort
Nein, und ja *.
Nein: Wie ein anderer Kommentator sagte, läuft Valgrind nicht auf 8051-Architekturen, daher können Sie Valgrind nicht wie auf einem x86-System verwenden.
Ja *: (das Sternchen (*) ist, weil es ein begrenztes ist "ja")
Aber Sie können Valgrind auf den Nicht-8051/IAR-spezifischen Teilen des Codes verwenden, wenn Sie:
- Trennen Sie den 8051-spezifischen und den IAR-spezifischen Code vom Architektur-/Compiler-Agnostikcode.
- Wahrscheinlich möchten Sie dies tun, damit der Code durch die Trennung des agnostischen Codes nicht größer wird. (Ich gehe davon aus, Code-Größe ist ein Premium, da Sie an einem 8051 arbeiten.)
- Kompilieren Sie die Architektur/Compiler Agnostic-Code mit gcc und führen Sie es mit Valgrind auf Ihrem Desktop/Laptop-Entwicklungsmaschine, die ist wahrscheinlich eine x86-Maschine.
- Natürlich können Sie jede andere Valgrind-unterstützte Architektur/Compiler verwenden, x86/gcc ist nicht Ihre einzige Wahl.
Auf diese Weise Valgrind wird einige Ihren Code überprüfen, die als nichts besser können.
Durch die Trennung der Compiler/Chip-spezifischen Teile Ihres Codes wird es auch tragbarer und wiederverwendbar.
Oh, und dies ist nicht direkt verwandt, aber Sie sollten auch ein statisches Analyseprogramm wie PC-Lint in Betracht ziehen: http://www.gimpel.com/html/index.htm
Es prüft einige Dinge, die Valgrind Kontrollen, und viele Dinge, die Valgrind nicht prüfen. Plus wird alle Ihres Codes überprüfen, nicht nur den Nicht-8051/IAR-Code.
Es gibt viele ähnliche Tools da draußen; PC-Lint ist das beliebteste, was ich gesehen habe.
Nein genau. Natürlich können Sie Ihren Code in anderen Architekturen auf häufige Fehler prüfen, aber einige architekturabhängige Probleme werden möglicherweise nicht gefunden.Für mich habe ich einen Endian-Fehler entdeckt. In Linux 32/64 Bit hat Valgrind kein Problem. Es ist jedoch ein Problem bei Sun SPARC. – jclin
Das meinte ich mit "Auf diese Weise wird Valgrind in der Lage sein, etwas von Ihrem Code zu überprüfen, was besser ist als nichts." Da Sie auf einer anderen Architektur arbeiten, werden keine 8051-bezogenen Architekturprobleme gefunden. – svec
Ich denke du solltest wissen was 8051 ist. Es ist ein Mikrocontroller, keine generische CPU. Es wird kein voll funktionsfähiges Betriebssystem haben und viele Operationen werden durch direkte IO- und Hardware-Interrupts und/oder durch Verwendung sehr kleiner RTOS ausgeführt. Also, das meiste Programm, das für 8051 geschrieben wurde, konnte nicht kompiliert und auf einem generischen Betriebssystem mit GCC ausgeführt werden, daher denke ich, dass es nicht möglich ist, 8051 Speicherprobleme unter Valgrind zu überprüfen. – jclin
Sie sollten diese Seite Valgrind Supported Platforms überprüfen. 8051-Mikrocontroller-Befehlssatz wird von Valgrind nicht unterstützt.
Darüber hinaus sollten Sie wissen Valgrind ist ein Befehlssimulator. Das bedeutet, dass Sie Valgrind auf dem System ausführen müssen und Ihren Code mit Betriebssystem und Basis-Layer von C oder anderen POSIX-Bibliotheken ausführen, um den Lese-/Schreibzugriff oder das Profiling Ihres Programms zu simulieren. So 8051 ist unmöglich, Valgrind zu laufen.
Haben Sie die Mailingliste valgrind users gefragt? Hast du http://valgrind.org/ überprüft? – NWS
Sie sollten diese Seite Valgrind Supported Platforms [1] überprüfen. 8051-Mikrocontroller-Befehlssatz wird nicht unterstützt. [1]: http://valgrind.org/info/platforms.html – jclin
@jclin Geben Sie Ihren Kommentar als Antwort ein. – Ross