Frage

Hintergrund:

Ich entwickle ein ziemlich großes Projekt unter Verwendung von Atmel AVR ATmega2560. Dieses Projekt enthält eine Menge von Hardware-basierten Funktionen (7 SPI-Geräten, 2 I2C, 2 RS485 Modbus-Ports, viele Analog- und Digital-I / O). Ich habe entwickelt „Treiber“ für alle diese Geräte, die die Hauptschleife mit einer Schnittstelle bieten die erforderlichen Daten zugreifen zu können.

Frage:

Das Projekt, das ich schließlich Standards erfüllen müssen SIL entwickle.

Ich möchte in der Lage sein, den Code zu testen und bieten ein gutes Niveau der Codeabdeckung. Allerdings bin ich nicht in der Lage, alle Informationen zu finden, um mir den Einstieg auf, wie ein solcher Test-Framework aufgebaut werden sollte.

Die Idee ist, dass ich eine Reihe von automatisierten Tests haben kann, die Zukunft Bugfixes und neuen Features ermöglicht werden getestet, um zu sehen, ob sie den Code brechen. Die Sache ist, ich verstehe nicht, wie der Code auf dem Chip getestet werden.

Muß ich Hardware erfordern das I / O auf dem Gerät zu überwachen und zu emulieren extern angeschlossenen Geräten? Alle Hinweise, die zur Verfügung gestellt werden könnten, würden sehr geschätzt werden.

- Steve

War es hilfreich?

Lösung

Dies ist eine sehr gute Frage - ein gemeinsames Anliegen für Embedded-Entwickler. Leider sind die meisten Embedded-Entwickler nicht so besorgt, wie Sie sind und nur den Code auf echter Hardware testen. Aber als eine andere Antwort darauf hingewiesen, kann dies im Grunde gerade testen Sie die nominale Funktionalität des Codes und nicht die Ecke / Fehlerfälle.

Es gibt keine einzige und einfache Lösung für dieses Problem. Einige Richtlinien und Techniken existieren, jedoch einen relativ guten Job zu machen.

Zuerst trennen Sie den Code in Schichten. Eine Schicht sollte "Hardware-agnostisch" sein - das heißt Funktionsaufrufe . Fragen Sie nicht, den Benutzer in HW-Register direkt zu schreiben. Die anderen (unteren) Schicht befasst sich mit der HW. Diese Schicht kann „verspottet“, um die höhere Ebene zu testen. Die untere Ebene kann nicht wirklich ohne HW getestet werden, aber es wird nicht zu oft ändern und muss tief HW-Integration, so ist es kein Problem.

Ein „Test-Harnisch“ wird alle Ihr High-Level-HW Agnostiker Code mit einem „falschen“ untere Ebene speziell für die Prüfung. Dies kann die HW-Geräte für richtige und falsche Funktionalität simulieren und somit können Sie automatisierte Tests auf dem PC laufen zu lassen.

Andere Tipps

Nie Unit-Tests laufen auf oder gegen die reale Hardware. Immer Ihre E / A-Schnittstellen verspotten. Ansonsten kann man nicht simulieren Fehlerbedingungen und, was noch wichtiger ist, können Sie nicht auf den Test verlassen kann, um erfolgreich zu sein.

Also, was Sie brauchen, ist Ihre Anwendung in verschiedene Teile zu spalten, dass Sie unabhängig testen können. Simulator (oder mock) alle Hardware, die Sie für diese Tests benötigen und auf dem Entwicklungs-PC ausgeführt werden.

Das sollte die meisten Ihren Code abdecken und Blättern Sie mit den Fahrern. Versuchen Sie, so viel von dem Treibercode wie möglich arbeiten, ohne die Hardware zu machen. Im übrigen werden Sie den Code, um einen Weg zu machen, laufen auf der Hardware Abbildung müssen. Diese in der Regel bedeutet, dass Sie einen Prüfstand mit externen Geräten auf Signale, die reagieren erstellen müssen etc. Da diese spröde ist (wie in „Ihre Tests können diese Arbeit nicht automatisch machen“), müssen Sie diese Tests manuell nach der Herstellung der Hardware ausgeführt werden.

Vector ist ein kommerzielles Werkzeug Unit-Tests auf der Hardware mit Codeabdeckung laufen.

Haben Sie einen JTAG-Anschluss? Können Sie JTAG auf dem Chip zu simulieren Fehlerbedingungen verwenden können.

Ich mag die Aufgaben trennen. Zum Beispiel, wenn ich einen Ringpuffer für meine Atmel AVR Ich habe es geschrieben hat alles in Code :: Blocks und es mit dem regulären GCC Compiler statt des AVR GCC Compiler kompiliert, dann habe ich für sie eine Einheit Test erstellen. Ich benutzen eine spezielle Header-Datei, die richtigen Datentypen zur Verfügung zu stellen, dass ich die Arbeit mit (uint8_t zum Beispiel) gesucht. Ich fand Fehler mit den Unit-Tests, so dass sie fixiert, dann den Code festgelegt übernahm zu AVR Studio und integriert sie. Nachdem die ich verwenden Unterstützungsfunktionen und ISRs schrieb den Puffer in nützlichen Code zu passen (dh pop ein Byte aus dem Puffer, schiebt es in das UART-Datenausgangsregister, append für eine printf Funktion der Puffer einen Stringkonstante usw.). Dann habe ich den AVR-Simulator, um sicherzustellen, dass mein ISRs und Funktionen aufgerufen wurden und dass die richtigen Daten auftauchten in den Registern. Danach habe ich programmiert sie auf den Chip und es funktionierte perfekt.

Ich ziehe stark die Debugging-Funktionen von Code :: Blocks im Vergleich zu AVR Studio, damit ich den oben beschriebenen Ansatz verwenden, wann immer ich kann. Wenn ich nicht bin ich in der Regel mit der Hardware zu tun nur. Zum Beispiel habe ich einen Timer, der eine Rechteckwelle automatisch erzeugt. Das Beste, was ich tun konnte, war zu sehen, dass der Stift Bit wurde im Simulator twiddled wird. Danach habe ich einen Umfang habe gerade anzuschließen und sicher zu machen.

Ich mag einen Multi-Level-Ansatz verwenden, wenn man Fehler. Zum Beispiel mit der Uhr 'Legen Sie eine Sonde auf der Uhr Stift und sehen, ob es ein Signal gibt es die erste Schicht. Wenn nicht, sondiert den Stift heraus auf dem uC und suchen Sie nach dem Signal. Dann codiert ich eine Debug-Schnittstelle in einem meiner UARTs, wo ich bestimmte Registerwerte betrachten und stellen Sie sicher, sie sind, was sie sein sollte. Also, wenn es nicht den nächsten Schritt arbeiten ‚rufen Sie die Wertregister und sicherzustellen, dass es richtig ist.‘

Versuchen Sie vor vier Schritten zu denken oder so, wenn Sie Ihre Debuggen planen. Es sollte hier + 5V sein, aber was, wenn es nicht wahr? Schreiben in die Debug-Schnittstelle eine Möglichkeit, den Stift zu wechseln und sehen, ob das sie sich ändert. Was passiert, wenn das nicht funktioniert? Etwas anderes tun, etc etc etc. Sie zu einem Punkt, wo Sie den Weg laufen ‚Ich habe keine Ahnung, warum das Ding dingt funktioniert nicht !!!!‘ aber hoffentlich werden Sie vorher den Grund herauszufinden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top