In-Circuit-Emulation - In-circuit emulation

In-Circuit-Emulation ( ICE ) ist die Verwendung eines Hardwaregeräts oder eines In-Circuit-Emulators, der zum Debuggen der Software eines eingebetteten Systems verwendet wird . Es arbeitet unter Verwendung eines Prozessors mit der zusätzlichen Fähigkeit, Debugging-Operationen zu unterstützen sowie die Hauptfunktion des Systems auszuführen. Vor allem bei älteren Systemen mit begrenzten Prozessoren musste der Prozessor dafür in der Regel temporär durch einen Hardware-Emulator ersetzt werden: eine leistungsfähigere, wenn auch teurere Version. Es war in der Vergangenheit in Form eines Bond-Out-Prozessors, der viele interne Signale zum Debuggen enthält. Diese Signale geben Auskunft über den Zustand des Prozessors.

In jüngerer Zeit umfasst der Begriff auch auf der Joint Test Action Group (JTAG) basierende Hardware-Debugger, die einen gleichwertigen Zugriff unter Verwendung von On-Chip-Debugging- Hardware mit Standard-Produktionschips bieten . Die Verwendung von Standardchips anstelle von kundenspezifischen Bond-Out-Versionen macht die Technologie allgegenwärtig und kostengünstig und eliminiert die meisten Unterschiede zwischen den Entwicklungs- und Laufzeitumgebungen. In diesem häufigen Fall ist der Begriff " In-Circuit-Emulator" eine falsche Bezeichnung , manchmal verwirrend, da keine Emulation mehr beteiligt ist.

Eingebettete Systeme stellen Programmierer vor besondere Probleme, da ihnen normalerweise Tastaturen , Monitore , Diskettenlaufwerke und andere Benutzeroberflächen fehlen, die auf Computern vorhanden sind. Diese Mängel machen In-Circuit-Software-Debugging-Tools für viele gängige Entwicklungsaufgaben unverzichtbar.

Funktion

Ein In-Circuit-Emulator (ICE) bietet ein Fenster in das eingebettete System. Der Programmierer verwendet den Emulator, um Programme in das eingebettete System zu laden, sie auszuführen, sie langsam durchzugehen und Daten anzuzeigen und zu ändern, die von der Systemsoftware verwendet werden.

Ein Emulator hat seinen Namen, weil er die zentrale Verarbeitungseinheit (CPU) des Computers des eingebetteten Systems emuliert (imitiert) . Traditionell hatte es einen Stecker, der in den Sockel eingeführt wurde, wo normalerweise der integrierte CPU - Chip platziert würde. Die meisten modernen Systeme verwenden die CPU des Zielsystems direkt mit einem speziellen JTAG-basierten Debug-Zugriff. Durch die Emulation des Prozessors oder den direkten JTAG-Zugriff darauf kann der ICE alles tun, was der Prozessor tun kann, jedoch unter der Kontrolle eines Softwareentwicklers.

ICEs verbinden ein Computerterminal oder einen Personal Computer (PC) mit dem eingebetteten System. Das Terminal oder der PC bietet dem Programmierer eine interaktive Benutzeroberfläche, um das eingebettete System zu untersuchen und zu steuern. Beispielsweise ist es Routine, einen Debugger auf Quellcodeebene mit einer grafischen Fensterschnittstelle zu haben, die über einen JTAG-Adapter (Emulator) mit einem eingebetteten Zielsystem kommuniziert, das keine grafische Benutzeroberfläche hat.

Bemerkenswerterweise werden die meisten eingebetteten Systeme einfach gemauert , wenn ihr Programm fehlschlägt . Eingebetteten Systemen fehlen oft grundlegende Funktionen, um Anzeichen von Softwarefehlern zu erkennen , wie beispielsweise eine Speicherverwaltungseinheit (MMU), um Speicherzugriffsfehler abzufangen. Ohne ICE kann die Entwicklung eingebetteter Systeme extrem schwierig sein, da man normalerweise nicht sagen kann, was schief gelaufen ist. Mit einem ICE kann der Programmierer normalerweise Codeteile testen, dann den Fehler auf einen bestimmten Codeabschnitt isolieren und dann den fehlerhaften Code untersuchen und neu schreiben, um das Problem zu lösen.

In Benutzung, bietet ein ICE die Programmierer mit der Ausführung von Haltepunkten , Speicher Anzeige und Überwachung, und Eingabe / Ausgabe - Steuerung. Darüber hinaus kann der ICE so programmiert werden, dass er nach einem beliebigen Bereich übereinstimmender Kriterien sucht, bei denen eine Pause eingelegt werden soll, um den Ursprung eines Fehlers zu identifizieren.

Die meisten modernen Mikrocontroller verwenden Ressourcen, die auf der hergestellten Version des Mikrocontrollers für Geräteprogrammierung, Emulation und Debugging-Funktionen bereitgestellt werden, anstatt eine andere spezielle Emulationsversion (dh Bond-Out) des Zielmikrocontrollers zu benötigen. Obwohl dies eine kostengünstige Methode ist, da die ICE-Einheit nur die Emulation verwaltet, anstatt den Zielmikrocontroller tatsächlich zu emulieren, müssen Kompromisse eingegangen werden, um die Preise zum Zeitpunkt der Herstellung niedrig zu halten und dennoch genügend Emulationsfunktionen für die (relativ wenigen) ) Emulationsanwendungen.

Vorteile

Praktisch alle eingebetteten Systeme haben ein Hardwareelement und ein Softwareelement, die zwar getrennt, aber eng voneinander abhängig sind. Der ICE ermöglicht das Software - Element auf der Hardware laufen und getestet werden , auf dem sie laufen, aber immer noch erlaubt Programmierer Komfort zu isolieren fehlerhaften Code, wie Source-Level - Debugging (zeigt ein Programm , wie es ursprünglich geschrieben wurde) und Einzelschritt (wodurch Programmierer Programme Schritt für Schritt ausführen können, um Fehler zu finden).

Die meisten ICEs bestehen aus einer Adaptereinheit, die zwischen dem ICE-Hostcomputer und dem zu testenden System sitzt. Eine Baugruppe aus Stiftleiste und Kabel verbindet den Adapter mit einem Sockel, an dem die eigentliche Zentraleinheit (CPU) oder der Mikrocontroller innerhalb des eingebetteten Systems montiert ist. Neuere ICEs ermöglichen Programmierern den Zugriff auf die On-Chip-Debug-Schaltung, die in die CPU über JTAG oder Hintergrund-Debug-Modus-Schnittstelle (BDM) integriert ist, um die Software eines eingebetteten Systems zu debuggen. Diese Systeme verwenden oft eine Standardversion des CPU-Chips und können einfach an einen Debug-Port eines Produktionssystems angeschlossen werden. Sie werden manchmal als In-Circuit-Debugger oder ICDs bezeichnet, um sich davon zu unterscheiden, dass sie nicht die Funktionalität der CPU nachbilden, sondern eine bereits vorhandene Standard-CPU steuern. Da die CPU nicht getauscht werden muss, können sie auf Produktionseinheiten betrieben werden, bei denen die CPU eingelötet ist und nicht ausgetauscht werden kann. Auf x86-Pentiums wird ein spezieller "Probe-Modus" von ICEs verwendet, um beim Debuggen zu helfen.

Im Kontext eingebetteter Systeme emuliert der ICE keine Hardware. Vielmehr bietet es einen direkten Debug-Zugriff auf die eigentliche CPU. Das zu testende System steht unter vollständiger Kontrolle, sodass der Entwickler Code direkt laden, debuggen und testen kann.

Die meisten Hostsysteme sind gewöhnliche kommerzielle Computer, die nichts mit der für die Entwicklung verwendeten CPU zu tun haben. Ein Linux- PC könnte beispielsweise verwendet werden, um Software für ein System zu entwickeln, das einen Freescale 68HC11- Chip verwendet, einen Prozessor, der Linux nicht ausführen kann.

Der Programmierer bearbeitet und kompiliert normalerweise auch den Code des eingebetteten Systems auf dem Hostsystem. Das Hostsystem verfügt über spezielle Compiler, die ausführbaren Code für das eingebettete System erzeugen, die als Cross-Compiler oder Cross- Assembler bezeichnet werden .

On-Chip-Debugging

On-Chip-Debugging ist eine Alternative zur In-Circuit-Emulation. Es verwendet einen anderen Ansatz, um ein ähnliches Ziel zu erreichen.

On-Chip-Debugging, oft lose als Joint Test Action Group (JTAG) bezeichnet, verwendet die Bereitstellung einer zusätzlichen Debugging-Schnittstelle zur Live-Hardware im Produktionssystem. Es bietet die gleichen Funktionen wie das In-Circuit-Debugging, wie z. B. die Überprüfung des internen Zustands oder der Variablen, und kann möglicherweise Checkpoints, Breakpoints und Watchpoints setzen. Der Unterschied besteht darin, dass dies durch zusätzliches Silizium innerhalb des Produktionsprozessors bereitgestellt wird, anstatt den Prozessor gegen einen Off-Board-Debugging-Emulator auszutauschen. Aus diesem Grund werden einige Funktionen des ICE durch die Spezifikationen des Prozessors verändert. Das Controller Board wird um eine zusätzliche JTAG-Schnittstelle erweitert, die auf jedem Produktionssystem benötigt wird, aber da nur wenige Signalpins benötigt werden, ist der Mehraufwand minimal. JTAG-Schnittstellen wurden ursprünglich für Tests am Ende der Produktion entwickelt und sind immer noch nützlich.

Intel

Um das Debugging von In-Circuit-Emulator (ICE) auf Intel 286 zu unterstützen , waren fünf zusätzliche Pins am Prozessor verfügbar: ein Eingangspin, um extern einen ICE-Breakpoint zu erzwingen, ( ICEBP#) und zwei alternative Paare von Ausgangspins, um Operationen über den ICE-Bus auszuwählen statt Benutzerspeicher. Auf dem 80286 existieren zwei Befehle ( 0F 04, 0F 05) zum Sichern/Wiederherstellen des kompletten CPU-Zustands auf Speicheroffset 0x800, zusammen mit einem Einzelbyte-Override-Präfix ( F1), um den ICE-Modus für den Zugriff auf den Benutzerspeicher zu aktivieren.

Siehe auch

Verweise

Externe Links