Was für einfache Methode kann ich verwenden, um einen Embedded-Prozessor ohne serielle Schnittstelle oder Video zu debuggen?

StackOverflow https://stackoverflow.com/questions/69492

  •  09-06-2019
  •  | 
  •  

Frage

Wir haben ein kleines Embedded-System ohne Video oder serieller Ports (das heißt wir können nicht ausgegeben Text über printf).
Wir möchten den Fortschritt unseres Codes durch die Initialisierungssequenz verfolgen.
Gibt es ein paar einfache Dinge, die wir tun können, damit helfen.
Es ist kein Betriebssystem ausgeführt wird, und die Hardware-Plattform ist etwas angepasst werden.

War es hilfreich?

Lösung

Die einfachste skalierbarste Lösung ist Status-LEDs. Toggle LEDs auf Basis von Aktionen, entweder in binärer Form oder, wenn bestimmte Aktionen auftreten, wenn Sie Ihren Fokus verengen können.

Die stärkste wird ein Hardware-JTAG-Gerät sein. Sie brauchen nicht einmal Breakpoints zu setzen - einfach in der Lage sein, die Anwendung zu beenden und den Zustand der Speicher inspizieren kann genug sein. Beachten Sie, dass einige Hardware-Plattformen nicht „fancy“ Optionen wie Speicher Uhren oder Hardware Breakpoints unterstützen. Ersteres wird gearbeitet in der Regel um mit ständig dem Prozessor zu stoppen und Speicher zu lesen (verwandelt Ihr 10MHz System in ein 1kHz-System), während letztere manchmal durchgeführt Code Wechsel mit (ersetzt die gezielte Anweisung mit einem anderen Sprung), die manchmal Masken andere Problemen . Seien Sie sich dieser Problematik bewusst und dem Embedded-Prozessoren sie gelten.

Andere Tipps

Es gibt ein paar Strategien, die Sie einsetzen können, mit dem Debuggen helfen:

Wenn Sie Output-Pins zur Verfügung haben, können Sie sie zu LEDs anschließen (oder einem Oszilloskop) und schalten Sie die Ausgangs-Pins hoch / niedrig, um anzuzeigen, dass bestimmte Punkte wurden im Code erreicht.
Zum Beispiel, 1 x Blinken könnte Programm geladen werden, 2 Blinken wird foozbar initialisiert, 3 blinken akzeptiert Eingänge ...

Wenn Sie mehrere Ausgangsleitungen zur Verfügung haben, können Sie eine 7-Segment-LED verwenden, um mehr Informationen (Zahlen / Buchstaben statt blinkt) übermitteln.

Wenn Sie die Fähigkeiten haben, den Speicher zu lesen und einige RAM zur Verfügung haben, können Sie die Sprint-Funktion verwenden printf-wie das Debuggen zu tun, sondern stattdessen auf einem Bildschirm / serielle Schnittstelle gehen, wird es in den Speicher geschrieben.

Es hängt von der Art der Fehlersuche, die Sie zu tun versuchen - vor allem, wenn Sie nach einer vorübergehenden Methode sind von Verfolgung oder wenn Sie versuchen, ein Werkzeug zu schaffen, die als Hinweis auf Status während der verwendet werden können, Laufzeit des Projekts (oder Produkt).

Für eine off, in der Tiefe Quelle Verfolgung und Debuggen eines In-Circuit-Debugger (zB. Jtag) kann sehr hilfreich sein. Allerdings sind sie sehr hilfreich, wenn Ihr Debug-Haltepunkte und Untersuchung von Speicher und Register erfordert Einstellung -., Die sie von geringem Nutzen macht, wo man zeitkritische Probleme beschäftigen

Wenn Sie benötigen Programmzustand zu bestimmen, ohne auf die Ausführung Ihres Systems einen wesentlichen Einfluss hat die Verwendung von LEDs zu ersparen angeschlossenen I / O-Pins wird hilfreich sein. Diese können auch als Eingang zu einem digitalen Speicheroszilloskop (DSO) oder Logikanalysator verwendet werden. Diese Technik kann durch die Auswahl einzigartige Muster der Impulse aus leistungsstärker werden, die auf dem DSO identifizierbar sein wird.

Für ein vielseitigere Debugging-Tool, obwohl, eine serielle Schnittstelle ist eine gute Lösung. Um Kosten und PCB Immobilien sparen Sie finden es sinnvoll, eine Plug-in-Modul zu verwenden, die den RS232-Wandler enthält.

Wenn Sie versuchen, eine längerfristige Anzeige des Status als Teil des normalen Betriebes des Produkts zu liefern, LEDs sind wieder ein billiges ein einfaches Verfahren. Doch in dieser Situation ist es am besten Muster von Impulsen zu wählen, die langsam genug sind, leicht durch visuelle Inspektion identifiziert werden. Dies wird alles, was Sie im Laufe der Zeit lernen Sie ein bestimmtes Muster, das „normales“ Verhalten darstellt.

Sie können ganz einfach emulieren serielle Kommunikation (UARTs) unter Verwendung von Bit-hämmern von dem IO-Pins des Systems. Haken Sie es in einem der Stifte der Karte und heften sich an einen RS232-Konverter gibt (TTL-zu-RS232-Konverter sind einfach zu kaufen oder bauen), die auf der PC-serielle Schnittstelle geht.

Ein JTAG-Debugger ist auch eine Option, wenn auch umständlich einzurichten.

Wenn Sie nicht JTAG haben, die von den anderen vorgeschlagen LEDs sind eine gute Idee - obwohl Sie in einem Test am Ende neigen / rebuild Zyklus zu versuchen, das Problem auf die Spur

.

Wenn Sie noch mehr Zeit erhalten, und Ersatz Hardware-Pins und Speicher zu ersparen, konnte man immer etwas-bash eine niedrige Geschwindigkeit serielle Schnittstelle. Ich habe festgestellt, dass ziemlich nützlich in der Vergangenheit.

Andere haben einige sehr gute Ideen mit Ausgangs-Pins vorgeschlagen, so werde ich nicht vorschlagen, obwohl es eine sehr gute Lösung sein kann, und ist sehr kostengünstig. Wenn Ihr Budget und Zielprozessorunterstützung es, ein Hardware-Trace-System (entweder ein altmodisches Emulator oder ein schickes BDM mit Bus-Snooping-Trace-Unterstützung) kann für diese Art der Sache groß sein. Es ist sehr teuer aber.

Die Idee, ein bisschen-knallte Software UART zu verwenden, ist schön, aber es ist erforderlich, einige Mühe in einem Schreiben und auch müssen Sie einige freie Timer und Interrupts. Wenn Ihre Hardware andere freie serielle Schnittstelle (SPI, I2C, ..), mit ihnen wäre einfacher. Mit einem kleinen Mikrocontroller Sie die Schnittstelle RS-232 umwandeln kann.

Wenn Sie für die Bit-Banging gehen, eine synchrone serielle machen könnte, eine einfachere Alternative sein, da es nicht auf das Timing entscheidend sein würde.

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