Ich überlege, wie ich Unit-Tests in meinem mcu-Projekt verwenden kann und welche Frameworks ich verwenden kann, um es zu vereinfachen.
Heute benutze ich einen stm32 mit OpenOCD-jtag von einem Linux-PC, wo alles von einem klassischen Makefile aus gesteuert und mit gcc crosscompiliert wird.
Ich könnte etwas selbst erstellen, aber wenn es einen Rahmen gibt, den ich verwenden kann, wäre es schön. (Es ist ein Bonus, wenn das Framework das Ergebnis in einem Format ausgeben kann, das Jenkins / Hudson lesen kann.)
Gibt es eine Möglichkeit, ein Unit-Test-Framework mit einem stm32 zu verwenden?
Antworten:
Schauen Sie sich CppUTest und James Grennings ausgezeichnete http://pragprog.com/book/jgade/test-driven-development-for-embedded-c an
CppUTest unterstützt C und C ++, und es hat einen schönen Satz von Makefile-Vorlagen, mit denen ich ziemlich schnell angefangen habe.
quelle
Es gibt viele Variablen, die das beste Unit-Testing-Framework für Ihre Situation bestimmen. Einige Punkte, die Ihre Wahl beeinflussen können, sind:
Die meisten xUnit-Frameworks bieten eine Basisfunktionalität, die nützlich sein kann. Ich habe Cunit in der Vergangenheit mit einigem Erfolg verwendet. (libcunit1-dev-Paket unter Ubuntu / Debian). Für die meisten Frameworks muss libc verfügbar sein, für einige ist zusätzliche Unterstützung für das Betriebssystem erforderlich.
Eine weitere Alternative, die nur 3 Zeilen lang ist, ist Minunit .
Ich habe festgestellt, dass Unit-Tests mit dem Mikrocontroller als Ziel ziemlich umständlich sind, da Sie in der Lage sein müssen, eine Umgebung zu präsentieren, in der Sie Tests herunterladen, ausführen und dann die Ergebnisse zurückholen können. Es ist schon eine große Aufgabe, die Plattform zu installieren, mit der Sie dies tun können.
Ein weiterer Ansatz, den ich gewählt habe, ist das Testen von Einheiten auf dem Host, wobei eine Abstraktionsschicht zwischen den Treibern und dem Anwendungscode implementiert wird. Da Sie gcc als Ziel verwenden, sollte der Code auch auf dem Host kompiliert werden.
Das Testen auf dem Compile-Host ist im Allgemeinen so viel einfacher, da Sie die vollständige Unterstützung des Host-Betriebssystems und aller seiner Tools haben. Wenn ich zum Beispiel auf dem Host teste, habe ich eine verspottete Version meines drahtlosen Treibers mit der gleichen Schnittstelle wie der echte Treiber, der auf dem Ziel ausgeführt wird. Die Host-Version verwendet UDP-Pakete, um die drahtlose Paketübertragung zu simulieren. Der Mock-Treiber unterstützt die Möglichkeit, Pakete zu verwerfen, damit ich meine Protokolle testen kann.
In dem Produkt, an dem ich gearbeitet habe, wurde ein Betriebssystem mit Threads verwendet, sodass die Abstraktionsebene zum Testen auf dem Host-Betriebssystem stattdessen Pthreads verwendete.
Obwohl dies nicht perfekt ist, ist es umso wahrscheinlicher, dass Sie mehr Testfälle implementieren, je einfacher Sie Tests schreiben und ausführen. Ein weiterer Vorteil der Ausführung des Codes auf verschiedenen Plattformen besteht darin, dass getestet wird, ob der Code portabel ist. Sie werden Endian-Fehler schnell erkennen, wenn sich Ziel- und Host-Architektur unterscheiden.
Ich bin jetzt ein bisschen vom Thema abwesend, aber ich bin der Meinung, dass diese Ideen bei der Auswahl des Testgerüsts und der Testmethoden hilfreich sein können.
quelle
Überprüfen Sie embUnit http://embunit.sourceforge.net/embunit/index.html . Es ist ein eingebettetes C-Unit-Test-Framework mit geringem Platzbedarf.
Wir haben es erfolgreich in einigen Embedded-Mikrocontroller-Projekten eingesetzt. Erwarten Sie nicht die Optionen und Funktionen, die Sie mit einem Desktop-Unit-Test-Framework erhalten. Aber es ist definitiv mächtig genug.
Es wurden viele Asserts für Sie definiert, sodass Sie nicht viel Zeit verlieren müssen, benutzerdefinierte Asserts wie mit minUnit zu schreiben.
quelle
Vor einiger Zeit habe ich ein ausführliches Tutorial zum Thema geschrieben: Unit-Testing (eingebettete) C-Anwendungen mit Ceedling ; Ich verwende diese Techniken in einer Reihe von Projekten und bin bis jetzt ziemlich glücklich.
quelle
Ich habe mich nur darum gekümmert. Ich habe hier einen dreiteiligen Artikel gefunden, der ein Unit-Test-Framework beschreibt:
http://www.eetimes.com/design/embedded/4007177/Doing-C-code-unit-testing-on-a-shoestring-Part-1-The-basics-and-the-tools
Ich würde auch allem zustimmen, was Austin erwähnt hat.
quelle
Versuchen Sie es mit Lint, aber ich glaube nicht, dass es für Unit-Tests oder zur Code-Analyse gedacht ist.
quelle