Wie kann ich den Arduino-Code testen?
Ich würde gerne in der Lage, unit-Tests mein Arduino-code. Im Idealfall würde ich in der Lage sein, alle tests, die zimmerreserviereung, ohne das Sie hochladen, den code auf den Arduino. Welche tools oder Bibliotheken kann mir dabei helfen?
Es ist ein Arduino-emulator in Entwicklungdie nützlich sein könnten, aber es noch nicht zu sein scheinen bereit für den Einsatz.
AVR Studio von Atmel enthält einen chip-simulator, der nützlich sein könnte, aber ich kann nicht sehen, wie ich würde verwenden es in Verbindung mit der Arduino-IDE.
InformationsquelleAutor der Frage Matthew Murdoch | 2009-04-23
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht Laufen Unit-Tests auf dem Arduino-Gerät oder Emulator
Der Fall gegen mikrocontroller-Gerät/Emulator/Sim-basierte tests
Den Zweck von unit-Tests ist die Prüfung der Qualität Ihrer eigenen code. Unit-tests sollten nie testen der Funktionalität von Faktoren außerhalb Ihrer Kontrolle.
Denken Sie es so: Selbst wenn du an test-Funktionalität des Arduino-Bibliothek, die mikrocontroller-hardware oder einen emulator, es ist absolut unmöglich für solche test-Ergebnisse zu sagen, nichts über die Qualität Ihrer eigenen Arbeit. Es ist daher absolut keinen Wert im schreiben von unit-tests, die auf dem Gerät ausgeführt werden (oder emulator).
Unabhängig davon, ob Sie erwägen, die Durchführung von tests auf dem Gerät oder einem emulator, du bist immer noch machen Sie sich wiederholen Brutal langsamen Prozess der:
Schritt 3 ist besonders böse, wenn Sie erwarten, um Diagnose-Nachrichten über einen seriellen Anschluss, aber dein Projekt selbst muss mit Ihrem Arduino ist nur der hardware-serial-port. Wenn Sie denken, dass die SoftwareSerial-Bibliothek, die helfen könnten, sollten Sie wissen, dass Sie wahrscheinlich stören die Funktionalität, die erfordert genaues timing, wie die Erzeugung anderer Signale zur gleichen Zeit. Dieses problem ist mir schon passiert.
Wieder, wenn Sie testen Sie Ihre Skizze mit Hilfe eines emulators und Ihre Zeit-kritische Routinen lief perfekt, bis Sie hochgeladen, um die eigentliche Arduino, dann ist die einzige Lektion, die Sie gehen zu lernen, ist, dass der emulator fehlerhaft ist--und dieses wissen immer noch zeigt nichts über die Qualität Ihrer eigenen Arbeit!
Wenn es dumm um zu testen, auf dem Gerät oder emulator, was sollte ich tun?
Wahrscheinlich verwenden Sie einen computer, um arbeiten auf Ihre Arduino-Projekt. Dieser computer ist buchstäblich Tausende mal schneller als die mikrocontroller. Schreiben Sie die tests, bauen und auf Ihrem computer ausführen.
Denken Sie daran, das Verhalten des Arduino-Bibliothek und mikrocontroller sollte davon ausgegangen, dass Sie entweder korrigieren oder zumindest konsequent falsche.
Wenn Ihr tests output produzieren im Gegensatz zu Ihren Erwartungen, dann haben Sie wahrscheinlich ein Fehler in Ihrem code, der getestet wurde. Wenn Sie Ihre test-Ausgabe Ihren Vorstellungen entspricht, aber das Programm verhält sich nicht korrekt, wenn Sie Sie hochladen, um den Arduino an, dann wissen Sie, dass die tests basierten auf falschen Annahmen und Sie haben wahrscheinlich eine fehlerhafte testen. In jedem Fall, Sie erhalten Einblicke darüber, was Ihre nächsten code-änderungen sollte.
Wie zum Erstellen und Ausführen von Tests auf Ihrem PC
Das erste, was Sie tun müssen, ist identifizieren Sie Ihre Prüfung Ziele. Überlegen Sie, was Teile der Ihren eigenen code Sie testen möchten, und dann stellen Sie sicher, konstruieren Sie Ihr Programm in der Weise, dass Sie können isolieren einzelne Teile für die Prüfung.
Wenn die Teile, die Sie testen möchten, rufen Sie eine Arduino-Funktionen, die Sie benötigen, um mock-up-Ersatz in Ihrem test-Programm. Das ist viel weniger Arbeit, als es scheint. Ihre mock-ups nicht wirklich etwas zu tun, sondern die Bereitstellung von vorhersehbaren input und output für Ihre tests.
Alle Ihre eigenen Codes, die Sie beabsichtigen, zu testen, muss es in source-Dateien, die anderen als der .pde-sketch. Keine Sorge, Ihre Skizze wird noch kompilieren auch mit einigen source-Codes außerhalb der Skizze. Wenn Sie wirklich runter, es, wenig mehr als Ihr Programm normal entry point definiert werden sollte, in der sketch-Datei.
Alles, was bleibt, ist das schreiben der tatsächlichen Prüfungen und dann kompilieren Sie es mit Ihrem Lieblings-C++ - compiler! Dies ist wahrscheinlich am besten mit einer realen Welt-Beispiel.
Ein Beispiel aus der Praxis
Eines meiner Lieblingsprojekte gefunden hier hat einige einfache tests, die auf dem PC laufen. Für diese Antwort Unterwerfung, ich werde einfach gehen, wie ich verspottet-einige Arduino-library-Funktionen und die tests, die ich schrieb, um zu testen, diese mock-ups. Dies steht nicht im Widerspruch zu dem, was ich sagte, bevor über nicht testen anderer Leute code, weil ich war derjenige, der schrieb, die mock-ups. Ich wollte absolut sicher sein, dass meine mock-ups waren korrekt.
Quelle mock_arduino.cpp, die code enthält, dupliziert einige support-Funktionen der Arduino-Bibliothek:
Verwende ich die folgenden mock-up, um eine lesbare Ausgabe, wenn mein code schreibt binäre Daten an den seriellen hardware-Gerät.
fake_serial.h
fake_serial.cpp
und schließlich die eigentlichen test-Programm:
Dieser Beitrag ist lang genug, so entnehmen Sie bitte mein Projekt auf GitHub zu sehen, einige weitere Testfälle in Aktion. Ich halte meine works-in-progress, der in den Zweigen andere als die Meister, so überprüfen jene Zweige, die für zusätzliche tests, auch.
Wählte ich Schreibe meine eigenen leichten test-Routinen, sondern mehr robuste unit-test-frameworks wie CppUnit sind auch verfügbar.
InformationsquelleAutor der Antwort Iron Savior
In der Abwesenheit von einem bereits bestehenden unit-test-frameworks für Arduino, die ich erstellt habe,ArduinoUnit. Hier ist ein einfaches Arduino-sketch zu demonstrieren:
InformationsquelleAutor der Antwort Matthew Murdoch
Habe ich sehr viel Erfolg-unit-Tests mein PIC-code, der durch die Abstraktion aus den Zugriff auf die hardware und lustig in meinen tests.
Ich zum Beispiel abstrakte PORTA mit
Dann SetPortA können leicht spotten, ohne Zugabe von overhead-code in den PIC-version.
Einmal die hardware-Abstraktion wurde getestet, während ich schnell feststellen, dass allgemein code geht aus dem test-rig, um den PIC und die Werke der ersten Zeit.
Update:
Ich benutze eine #include-Naht für die Einheit code, #, einschließlich der unit-code in ein C++ - file für die test-rig und C-Datei für das Ziel-code.
Als ein Beispiel möchte ich multiplex-vier 7-segment-displays, einem Hafen fahren, der Segmente und einen zweiten auswählen der Anzeige. Der display-code-Schnittstellen, die mit den displays über
SetSegmentData(char)
undSetDisplay(char)
. Ich kann spotten diese in meinem C++ - Prüfstand und schauen, dass ich die Daten, die ich erwarte. Für das Ziel-ich verwende#define
so, dass ich eine direkte Zuordnung ohne den overhead eines FunktionsaufrufsInformationsquelleAutor der Antwort David Sykes
Scheint es, dass emulino würde den job perfekt.
GitHub-repository
InformationsquelleAutor der Antwort Gonzo
simavr ist ein AVR simulator Verwendung von avr-gcc.
Unterstützt es bereits ein paar ATTiny und ATMega-mikrocontroller, und - so der Autor - es ist einfach zu fügen Sie einige mehr.
In den Beispielen liegt simduino, ein Arduino-emulator. Es unterstützt das starten der Arduino-bootloader und kann programmiert werden mit avrdude durch Schockiert (eine modifizierte Netcat).
InformationsquelleAutor der Antwort Gonzo
Können Sie unit-Tests in Python mit meinem Projekt, PySimAVR. Arscons wird verwendet für den Aufbau und die simavr für die simulation.
Beispiel:
Test starten:
InformationsquelleAutor der Antwort ponty
Ich kenne keine Plattform, die Sie testen können Arduino-code.
Gibt es allerdings die Fritzing Plattform, die Sie verwenden können, um ein Modell der hardware-und später der export PCB-Schaltpläne und so Zeug.
Lohnt.
InformationsquelleAutor der Antwort Yuval Adam
Sind wir mit Arduino-boards für die Datenerfassung in einer großen wissenschaftlichen experiment. Anschließend haben wir zur Unterstützung mehrere Arduino-boards mit unterschiedlichen Implementierungen. Ich schrieb Python-utilities, um das dynamische laden von Arduino-hex-Bilder, die während der unit-Tests. Den code finden Sie auf dem link unten, unterstützt Windows und Mac OS X über eine Konfigurationsdatei. Finden Sie heraus, wo Ihre hex-Bilder werden von der Arduino-IDE, drücken Sie die Umschalttaste, bevor Sie auf die build (play) - Taste. Schlagen Sie die shift-Taste während des Schlagens hochladen, um herauszufinden, wo Ihre avrdude (command-line-Werkzeug "hochladen") befindet sich auf Ihrem system /version des Arduino. Alternativ können Sie die mitgelieferten Konfigurations-Dateien und verwenden Sie Ihren Speicherort installieren (derzeit auf Arduino-0020).
http://github.com/toddstavish/Python-Arduino-Unit-Testing
InformationsquelleAutor der Antwort toddstavish
Dieses Programm ermöglicht das automatisierte ausführen von mehreren Arduino-unit-tests. Der Prüfablauf wird gestartet auf dem PC, aber die tests, die auf das eigentliche Arduino-hardware. Eine Reihe von unit-tests ist in der Regel verwendet, um zu testen, eine Arduino-Bibliothek.
(diese
Arduino-Forum: http://arduino.cc/forum/index.php?topic=140027.0
GitHub Projekt Seite: http://jeroendoggen.github.com/Arduino-TestSuite
Seite im Python Package Index: http://pypi.python.org/pypi/arduino_testsuite
Die unit-tests geschrieben werden, die mit der "Arduino-Unit-Test-Bibliothek": http://code.google.com/p/arduinounit
Werden die folgenden Schritte durchgeführt für jede Gruppe von unit-tests:
InformationsquelleAutor der Antwort jeroendoggen
Ich bin mit Searduino beim schreiben Arduino-code. Searduino ist ein Arduino-simulator und eine Entwicklungsumgebung (Makefiles, C-code,...), der macht es leicht zu hacken in C/C++ mit Ihrem Lieblings-editor. Sie können importieren Arduino Skizzen und führen Sie Sie in den simulator.
Screenshot von Searduino 0.8: http://searduino.files.wordpress.com/2014/01/jearduino-0-8.png
Searduino 0.9 veröffentlicht und ein video wird aufgenommen, sobald die letzten tests fertig sind .... in ein oder zwei Tage.
Tests auf dem simulator ist nicht als Reale tests, aber es sicherlich mir viel geholfen bei der Suche nach dumm/logischer Fehler (vergessen
pinMode(xx, OUTPUT)
usw.).BTW: ich bin einer der Menschen, die Entwicklung Searduino.
InformationsquelleAutor der Antwort user3183814
Halten Sie die hardware-spezifischen code, getrennt oder abstrahiert von der rest-so können Sie testen und Debuggen, der größere "rest" auf jeder Plattform, für die Sie über gutes Werkzeug, mit dem Sie vertraut sind, die meisten.
Grundsätzlich versuchen, zu bauen, wie viel von den endgültigen code von wie vielen bekannt-an-die-Arbeit-Bausteine wie möglich. Die restliche hardware-spezifische Arbeit wird dann viel einfacher und schneller. Sie kann es beenden, indem Sie vorhandene Emulatoren und/oder emuliert Geräte auf Ihrem eigenen. Und dann, natürlich, werden Sie brauchen, um zu testen, die Reale Sache irgendwie. Je nach den Umständen, die möglicherweise oder möglicherweise nicht sehr gut automatisierbar (also wer oder was wird auf die Knöpfe drücken und andere Eingänge? wer oder was wird beobachten und interpretieren, die verschiedenen Indikatoren und Ausgänge?).
InformationsquelleAutor der Antwort Alexey Frunze
James W. Grenning schreibt tolle Bücher und ist man über unit-testing, embedded-C-code Testgetriebene Entwicklung für Embedded C.
InformationsquelleAutor der Antwort Rafael Vega
Gibt es ein Projekt namens ncoredie native core für den Arduino. Und ermöglicht Ihnen das schreiben von tests für den Arduino-code.
Aus der Beschreibung des Projekts
Auch auf die "was muss ich tun, um es zu verwenden" Abschnitt
InformationsquelleAutor der Antwort Sudar
Wenn Sie möchten, unit-test-code außerhalb MCU (auf dem desktop), check-out libcheck:
https://libcheck.github.io/check/
Habe ich es benutzt, um zu testen, meine eigenen eingebetteten code paar mal. Es ist ziemlich robusten Rahmen.
InformationsquelleAutor der Antwort ezaquarii
Ich bin erfreut bekannt zu geben (was zu sein scheint) mit der ersten stabilen Version von ein ruby-gem mit dem Namen
arduino_ci
dass ich für diesen Zweck gebaut. Obwohl es sich um eine Testphase Arduino-Bibliotheken (und nicht standalone-Skizzen), die es ermöglicht unit-tests ausgeführt werden, die auf Travis CI.Vorausgesetzt, Sie haben Ruby und rubygems installiert, das hinzufügen dieses CI zu einer Bibliothek ist unkompliziert. Stellen wir uns eine sehr einfache library in den Arduino Library Verzeichnis, genannt
DoSomething
. Es enthält eine header-Datei, und diese Implementierung:Lassen Sie uns testen Sie es mit
arduino_ci
. Zuerst müssen Sie einenGemfile
im Basis-Verzeichnis der Bibliothek mit dem folgenden Inhalt:Nächsten, laufen
bundle install
.Als Nächstes erstellen Sie ein Verzeichnis namens
test/
. (Jeder.cpp
Datei, die Sie Ort hier wird als separates test-suite). Erstellen wir einen test für jetzt, intest/is_four.cpp
:Das ist alles. Wenn das
assertEqual
syntax und Teststruktur vertraut aussieht, ist es, weil ich nahm einige Matthew Murdoch ArduinoUnit Bibliothekdass er nach seine Antwort.
Jetzt sind Sie bereit zu laufen
bundle exec arduino_ci_remote.rb
der ausgeführt wird, die tests. Es geben könnte die Ausgabe so etwas wie dieses:Läuft der gleiche code als Teil ein CI-job, der auf Travis CI (z.B. so, dass Sie auslösen können es von GitHub pull-Anforderungen) ist einfach wie gut. Nur fügen Sie diese an Ihre
.travis.yml
Datei:Natürlich, es ist weit mehr Leistung und Flexibilität, um dieses CI-Bibliothek als ich bin immer hier. Hier sind einige andere Beispiele:
InformationsquelleAutor der Antwort Ian
Können Sie emulare — Sie können per drag und drop von einem mikrocontroller auf ein Diagramm und führen Sie den code in Eclipse. Die Dokumentation auf der website erfahren Sie, wie Sie es einrichten.
InformationsquelleAutor der Antwort Imre
Verwenden Proteus VSM mit einem Arduino-library, um den code Debuggen oder zu testen.
Ist es die beste Praxis zu bekommen, bevor Sie Ihren code an Bord hat, aber sicher sein, mit timings, da die simulation nicht in Echtzeit, wie Sie laufen auf dem board.
InformationsquelleAutor der Antwort sathish
Versuchen Autodesk circuit simulator. Es erlaubt das testen Arduino-code und schaltungen mit vielen anderen hardware-Komponenten.
InformationsquelleAutor der Antwort Sidhant Goyal