Der Profi-Leitfaden zu Debugging-Tools und -Techniken für IoT-Geräte
Zur Verfügung gestellt von Nordamerikanische Fachredakteure von DigiKey
2021-03-23
Die Entwicklung eines eingebetteten Systems, bei dem Software und Hardware zusammenspielen müssen, ist extrem komplex und herausfordernd geworden, selbst für die scheinbar einfachsten Geräte im Internet der Dinge (IoT). So sehr, dass, wenn etwas schief geht - was unweigerlich der Fall sein wird - die Fehlerbehebung normalerweise nicht ein paar Stunden dauert, sondern Wochen oder Monate. Diese Verzögerungen erhöhen die Entwicklungskosten, verhindern, dass ein Produkt rechtzeitig auf den Markt kommt, verzögern die Fertigungspläne und zerstören Lieferketten und Geschäftspläne.
Die beste Möglichkeit, den Zeitaufwand für die Fehlersuche zu verringern und ein Projekt auf Kurs zu halten, ist die Verwendung einer Kombination aus Hardware-Debugging-Tools und frei verfügbarer Software, um Einblicke in die Leistung eines Systems und die Ursachen der Probleme zu erhalten. Sowohl für Profis als auch für Hobbybastler ist es wichtig, die richtigen Werkzeuge für die jeweilige Aufgabe zu haben, damit diese schnell und korrekt erledigt werden kann.
In diesem Artikel werden Entwicklungswerkzeuge und Software besprochen, die zum Debuggen und Analysieren der Leistung eines IoT-Geräts verwendet werden können. Es wird ein Entwicklungsboard von STMicroelectronics als Beispiel für ein IoT-Gerät verwenden und die Werkzeuge und Software von SEGGER Microcontroller Systems nutzen, um das System zu verstehen und zu debuggen. Außerdem werden einige Tipps und Tricks besprochen, wie man die Zeit für die Fehlerbehebung minimiert und ein IoT-Projekt termingerecht abliefert.
Das typische IoT-Gerät zum Debuggen
IoT-Geräte haben sich in fast jeder Branche durchgesetzt, vom intelligenten Haus bis zur industriellen Überwachungssteuerung. Trotz der Vielfalt der Anwendungen gibt es einige typische Komponenten, die ein IoT-Gerät haben wird. Dazu gehören:
- Ein Mikroprozessor
- Eine Funkkomponente für die Vernetzung
- Sensoren
Ein Entwickler wird sich nicht sein eigenes Board zusammenbasteln wollen, um Debug-Techniken zu erforschen oder Teile seines Anwendungscodes zu testen. Es ist einfach zu zeitaufwendig. Stattdessen ist es klüger, mit einem kostengünstigen Entwicklungsboard wie dem Discovery-Kit B-L4S5I-IOT01A für IoT-Knoten von STMicroelectronics zu arbeiten. Dieses enthält fast alles, was auf einem typischen IoT-Gerät zu finden ist (Abbildung 1).
Abbildung 1: Das Discovery-Kit B-L4S5I-IOT01A von STMicroelectronics für IoT-Knoten enthält alle Komponenten, die typischerweise in einem IoT-Gerät benötigt werden. (Bildquelle: STMicroelectronics)
Das Board enthält den STM32L4S5VIT6, einen Arm®-Cortex®-M4-Mikrocontroller, der mit 120 Megahertz (MHz) betrieben wird. Es wird durch bis zu 2 Megabyte (MByte) Flash und 640 Kilobyte (KByte) RAM unterstützt. Wichtig für die Zwecke dieser Übung ist, dass das Board Wi-Fi und eine Fülle von Sensoren enthält, mit denen man schnell ein IoT-Testgerät nachbauen kann.
Professionelle Hardware-Tools zur Fehlersuche
Nahezu jedes Entwicklungsboard verfügt über eine integrierte JTAG/SWD-Schnittstelle, so dass der Entwickler sich kein eigenes Programmiergerät besorgen muss. Stattdessen können sie mit dem Entwicklungsboard direkt nach dem Auspacken arbeiten. Während dies für Marketingzwecke großartig ist, ist es für die reale Entwicklung nicht so großartig: On-Board-Debugger sind oft dramatisch verkleinerte Versionen, die Einschränkungen haben, wie z.B. die Anzahl der verfügbaren Breakpoints und die Schnittstellen-Baudrate. Für den Uneingeweihten mögen diese Einschränkungen nicht wie eine große Sache erscheinen, aber mit unbegrenzten Haltepunkten wird vermieden, dass ständig Haltepunkte aktiviert und deaktiviert werden müssen, und schnelle Baudraten werden für die Ablaufverfolgung von Anwendungen benötigt (mehr über die Ablaufverfolgung im Abschnitt Software-Tools).
Es gibt verschiedene Tools, die ein professionelles Debugging ermöglichen, aber die Tools selbst sind nur die halbe Lösung. Die Werkzeuge müssen durch gute Software unterstützt werden. Ein Werkzeugsatz, der sowohl hardware- als auch softwareseitig hervorsticht, ist die SEGGER-J-Link-Serie. Diese Serie bietet eine Debugger-Version für fast jeden Entwicklertyp, vom Studenten und Hobbyisten bis zum Hardcore-Profi.
Es gibt zwei Modelle, die sich erfahrungsgemäß für den allgemeinen Entwickler als am nützlichsten erwiesen haben: der J-Link Base und der J-Link Ultra+ (Abbildung 2). Vom Formfaktor her sind die beiden Geräte identisch, aber der J-Link Ultra+ bietet dem Entwickler höhere Download-Geschwindigkeiten zum RAM (3 MByte/s gegenüber 1,0 MByte/s) und eine schnellere SWD-Schnittstellengeschwindigkeit (100 MHz statt 30 MHz). Die höheren Geschwindigkeiten machen den Unterschied aus, wenn ein Entwickler seine Anwendungsausführung nachverfolgen möchte, um Einblicke in die Leistung und das RTOS-Verhalten zu erhalten und sein System zu debuggen.
Abbildung 2: Der J-Link Ultra+ von SEGGER bietet Entwicklern ein erweitertes Debugger-Erlebnis durch eine 50-MHz-Target-Schnittstelle. (Bildquelle: SEGGER Microcontroller Systems)
Das Schöne am J-Link und der Entwicklungsplatine B-L4S5I-IOT01A ist, dass beide über das Kabel TC2050-IC-NL von Tag-Connect und den Halteclip TC2050-CLIP-3PACK verbunden werden können. Diese ermöglichen den Anschluss eines Debuggers an das Entwicklungsboard über das „Stiftfeld“ (Bild 3). Es kann notwendig sein, den 20-poligen Stecker des J-Link an den 10-poligen Stecker des TC-2050-Kabels anzupassen. Eine Option, die dafür verwendet werden kann, ist der 8.06.04 J-Link 10-Pin Needle Adapter.
Abbildung 3: Auf der Entwicklungsplatine B-L4S5I-IOT01A kann die Kabelkonfektion von Tag-Connect über ein Stiftfeld (rechts) angeschlossen werden. (Bildquelle: STMicroelectronics)
Sobald ein Entwickler diesen Pfad auf der Hardwareseite hergestellt hat, kann er die Software-Tools zur Analyse und zum Debuggen seiner Anwendung verwenden.
Professionelle Software-Tools zur Fehlersuche
Es gibt eine ganze Reihe von Software-Tools, die recht gut mit den J-Link-Tools von SEGGER zusammenarbeiten, die überraschenderweise nicht von SEGGER zur Verfügung gestellt werden. Im Folgenden werden einige dieser kostenlosen Tools vorgestellt und es wird gezeigt, wie Entwickler sie zum Debuggen ihrer Software einsetzen können.
Das erste Tool ist J-Scope. J-Scope ist ein oszilloskopähnliches Tool, das variable Werte im Zeitverlauf anzeigt. Entwickler können eine einzelne Variable oder mehrere Dutzend Variablen überwachen. Beachten Sie jedoch, dass je mehr Variablen überwacht werden, desto weniger Abtastwerte können genommen werden, bevor der Puffer überläuft und Daten verloren gehen.
Variablen werden ausgewählt, indem J-Scope die vom Compiler ausgegebene elf-Datei zur Verfügung gestellt wird. Dadurch werden die zu lesenden Speicherplätze bereitgestellt, und der Entwickler kann dann seine Abtastraten einstellen und überwachen, wie sich die Variablen im Laufe der Zeit ändern. Ein einfaches Beispiel für eine Drei-Variablen-Kurve ist in Abbildung 4 zu sehen.
Abbildung 4: J-Scope kann verwendet werden, um Variablen über J-Link zu überwachen, während eine Anwendung in Echtzeit läuft. (Bildquelle: SEGGER Microcontroller Systems)
Das nächste Tool ist Ozone. Ozone ist eine Debugger-Schnittstelle und ein Leistungsanalysator. Entwickler können ihre elf-Datei in das Tool laden und Debugging auf Quellcode-Ebene durchführen. Sie können Haltepunkte setzen und ihren Code aktualisieren. Eine besonders nützliche Funktion für Entwickler ist, dass sie auch eine Befehlsverfolgung durchführen können (wenn ihre Hardware dies unterstützt) und feststellen können, welche Assembler- und C-Code-Anweisungen ausgeführt wurden. Dies ist besonders nützlich für die Überprüfung der Codeabdeckung von Hardware-in-Loop(HiL)-Tests.
Ozone kann Entwicklern auch helfen, ihre Systemleistung zu analysieren (Abbildung 5) und Variablen im Zeitverlauf zu visualisieren. Dies bietet Funktionen wie beim J-Scope, jedoch in einer stärker integrierten Weise. Es kann sogar dazu verwendet werden, den Stromverbrauch zu überwachen und alle diese Ereignisse an einem Ort zu synchronisieren.
Abbildung 5: Ozone kann verwendet werden, um Variablen über J-Link zu verfolgen, während eine Anwendung in Echtzeit läuft, zusätzlich zur Codeabdeckung und zum RTOS-bewussten Debugging. (Bildquelle: SEGGER Microcontroller Systems)
Ein drittes Tool ist SystemView. Mit SystemView können Entwickler das Laufzeitverhalten ihres RTOS-Systems analysieren. Der Taskwechsel wird in einem Trace-Puffer aufgezeichnet und dann über den Debugger an SystemView gemeldet (Abbildung 5). SystemView zeigt diese Informationen dann in einer Weise an, die es einem Entwickler ermöglicht, die Kontextwechsel zu sehen und die Leistung seines Systems zu messen. Dies ist auch eine großartige Möglichkeit, ein System zu visualisieren und Bugs und andere Probleme zu finden.
Abbildung 6: SystemView bietet einen Einblick in ein RTOS, der es Entwicklern ermöglicht, die Leistung von Tasks zu messen und zu visualisieren, was das RTOS macht und wann es dies macht. (Bildquelle: SEGGER Microcontroller Systems)
Tipps und Tricks zur Fehlersuche in einem eingebetteten System
Das Debuggen eines IoT-Geräts erfordert, dass Entwickler sowohl aus der Hardware- als auch aus der Software-Perspektive über die richtigen Tools verfügen. Beide Teile müssen vorhanden sein, wenn Entwickler die Zeit, die sie mit der Fehlersuche verbringen, minimieren wollen. Um erfolgreich zu debuggen, gibt es einige „Tipps und Tricks“, die Entwickler beachten sollten, wie z. B.:
- Verwenden Sie einen professionellen Debugger, der die Schnittstellen-Baudrate maximiert. Die Menge der nützlichen Daten, die aus einem System gewonnen werden können, hängt davon ab, wie schnell diese Daten empfangen werden können. Langsamere Geschwindigkeiten führen zu einer längeren Fehlersuche.
- Richten Sie die Debug-Software früh im Entwicklungszyklus ein. Entwickler sollten nicht warten, bis sie ein Problem haben, um ihre Debugging-Tools einzurichten.
- Verwenden Sie Trace-Tools von Beginn der Entwicklung an. Dadurch können Entwickler die Systemleistung überwachen und sofort erkennen, wie sich Softwareänderungen darauf auswirken.
- Nutzen Sie Befehlsverfolgung oder Programmzähler-Sampling, um die Systemcode-Abdeckung während des Testens zu verstehen. Fehler werden in ungetesteten bedingten Verzweigungen und Code existieren.
- Nutzen Sie schnelle Übertragungsprotokolle, um Daten aus dem Chip zu holen, wie z. B. die RTT-Bibliotheken (Real-time Transfer).
Entwickler, die diese „Tipps und Tricks“ befolgen, werden feststellen, dass sie eine Menge Zeit und Ärger sparen, wenn sie auf die Sicherung ihres IoT-Geräts hinarbeiten.
Fazit
Die Software von IoT-Geräten ist komplex geworden, aber das bedeutet nicht, dass professionelle oder Hobby-Entwickler ständig mit dem Debuggen ihrer Systeme beschäftigt sein müssen. Der Einsatz von professionellen Entwicklungswerkzeugen und Software kann Entwicklern die nötigen Einblicke verschaffen, um ein System nicht nur zu debuggen, sondern auch die Systemleistung zu analysieren und zu verbessern. Durch die Investition in diese Tools können Anwender die Zeit, die sie für die Fehlersuche aufwenden, drastisch reduzieren und ihre Projekte in einem vernünftigen Zeitrahmen zum Laufen bringen.

Haftungsausschluss: Die Meinungen, Überzeugungen und Standpunkte der verschiedenen Autoren und/oder Forumsteilnehmer dieser Website spiegeln nicht notwendigerweise die Meinungen, Überzeugungen und Standpunkte der DigiKey oder offiziellen Politik der DigiKey wider.