moin,
Nur zum Verständnis: Die modernen Mikrokontroller haben ja alle einen
ICE (In-Circuit-Emulator). Das ist doch ein extra-Chip, der mit dem
Mikrokontroller verbunden ist. Das ganze Debuggen, Flashen u.s.w. geht
ja über diesen ICE. Man greift also nicht direkt auf den Mikrokontroller
zu.
Könnt ihr mir da weiterhelfen?
2. Frage: Wenn ich irgendetwas über den Emulator mache, geht es direkt
auf den Original-Mikrokontroller über. z. B. wenn ich über den Emulator
Flashe, Debugge etc.. --> wirkt sich das dann auf den eigentlichen
Mikrokontroller aus. Was ist denn der Sinn vom Emulator?
Der Sinn eines Emulators ist wie der Name schon vermuten lässt den
jeweiligen Mikrocontroller zu emulieren. Also sein gesamtes Spektrum der
Fähigkeiten (in einer Software) nachzubilden. Das gibt einem die
Möglichkeit unbeschränkt Eingriffe für das Debugging, etc. vorzunehmen.
Den meisten Entwicklern reichen z.B. Breakpoints um zu diesen
beispielsweise Timer auszulesen, etc. Das alles aber ein viel größeres
Spektrum kann man mit einem ICE erreichen. Unverzichtbar bei
Sicherheitskritischen Entwicklungen um Fallbackmodes, etc zu testen. Für
den Hobbyanwender so gut wie unbezahlbar.
Toffifee schrieb:> Das ist doch ein extra-Chip, der mit dem> Mikrokontroller verbunden ist.
Damit kommt man nicht weit, da an einem µC-Chip fast nichts
entscheidendes von aussen gelesen werden kann, wie z.B. der Inhalt eines
Registers oder der Stand eines Timers.
Dazu gab es früher "Bond-Out-Chips", Spezialanfertigungen des
Prozessors, bei dem entsprechende interne Busse nach aussen geführt
waren. Zu Zeiten eines Z80 war zum Ersetzen der CPU noch ein 40 poliges
Kabel mit DIL-Stecker ausreichend, heute geht das praktisch nicht mehr,
da es keinen Stecker gibt, um etwa ein TQFP-100-Package zu emulieren, es
gibt ja kaum noch Chips, für die überhaupt Fassungen verfügbar sind.
Deshalb wird heute eher eine Debugschnittstelle im Chip selbst
vorgesehen, z.B. JTAG, so dass man die Informationen über 4 Leitungen
und ein Debug-Interface abfragen kann.
D.h. aber auch, wenn man diese Leitungen auf der Leiterplatte nicht auf
einen Debugstecker führt, sondern als I/O verwendet, kann man auch nicht
debuggen.
Gruss Reinhard
Bevor's vergessen geht. Ein Emulator ist in der realen Hardware. Und
laesst den Benutzer das Programm zb Singlesteppen. Wenn nur simuliert
wird, nennt sich das Simulator.
Die wichtigste Frage ist aber: Wirken sich alle Sachen, die ich mit dem
Emulator mache z. B. das Flashen des Programms oder das Steppen des
Programms auf den eigentlichen Mikrokontroller aus?
grus
Was ich einfach wissen will ist: Es gibt einen JTAG-Adapter, den man ans
Board anschließen kann. Dabei gibt es die Modi's "Debugging" und
"Flashing". Wirkt sich beides auf den eigentlichen / originellen
Mikrokontroller aus?
Toffifee schrieb:> Wirkt sich beides auf den eigentlichen / originellen> Mikrokontroller aus?
Es kann nur einen geben - der der eingelötet ist. Im Interface kann zwar
auch ein Controller sein (fast immer), aber der macht USB und das
JTAG-Protokoll und ist meistens auch ein anderer als der Debuggee.
Rein prinzipiell könnte man in einem Mehrprozessor-System mehr als einen
Prozessor an den JTAG-Stecker verbinden, aber ich vermute dass viele
Debugger die garnicht getrennt ansprechen können, ich würde das daher
lassen.
Da für viele Chips Fassungen und Adapter nicht erhältlich oder
unbezahlbar sind, ist das Flashen "In System" die gängige Methode auch
für die Fertigung. Die nötigen Pins muss man sich halt gönnen.
Gruss Reinhard
JTAG ist erstmal nur die gebräuchliche Bezeichnung einer
Hardwareschnittstelle, die mit einem internen Zustandsautomaten
verbunden ist, der über diese Schnittstelle angesteuert werden kann.
Ursprünglich wohl hauptsächlich für Boundary-Scan entwickelt (d.h. Pins
über die Schnittstelle schalten und abfragen) - der "Modus" wurde noch
nicht genannt. Es gibt aber noch eine andere Methoden (BDM, SWD, PDI
...)
Debuggen ist zumindest abhängig von der Schnittstelle (z.B. JTAG,
BDM...) und dem verwendeten Controllerkern (z.B. Cortex M3, MIPS, AVR
etc.). Da der aber bisher nicht genannt wurde, auch auf Nachfrage von
2v3, gibt es keine konkrete Antwort.
"Auswirkungen" auf den Controller können sein: verändertes
Laufzeitverhalten durch breakpoints/steppen, Temporäre Änderunge des
Programmcodes durch zeitweise eingefügte Halteanweisungen und anderes.
Konkrete Antwort ohne mehr Details kaum möglich.
Bei "flashen" muss man zwischen internen und externen Speichern
unterscheiden. Bei internen Speichern ist es zumindest bei ARM-basierten
Controllern üblich, dass über die Debug-Schnittstelle ein kleines
Programm ins RAM des Controllers übertragen wird, dass dann Blockweise
die vorher über die Schnittstelle in andere Bereiche des RAMs
übertragene Daten in den Flash-Speicher schreibt. Wie das "kleine
Programm" aussieht ist abhängig vom Controller (nicht nur von dessen
Kern). Wäre bitter, wenn sich das nicht auf den "eigentlichen"
Controller(-speicher) auswirken würde. Externer Speicher kann mit dem
gleichen Ansatz geschrieben werden allerdings gibt es auch die
Möglichkeit über die Boundary-Scan-Funktinoalität zu schreiben - meist
aber mit deutlich geringeren Übertragungsraten.
Nachtrag: Besagtes Verbinden mehrerer Targets an eine JTAG-Schnittstelle
ist meines wissens Teil der Spezifikation. Wenn alle Teilnehmer diese
richtig implementieren (wohl nicht immer der Fall), ist eine Scan-Chain
über JTAG möglich und bei Controller-FPGA-Kombiboards wohl üblich.
Martin Thomas schrieb:> Nachtrag: Besagtes Verbinden mehrerer Targets an eine JTAG-Schnittstelle> ist meines wissens Teil der Spezifikation.
Ja, aber nicht das Debuggen - daher sind auch die JTAG-Debugger i.A.
nicht austauschbar, sondern nur für eine bestimmte Prozessorklasse
geeignet. Als Mod könntest du dafür dankbar sein, Fragen wie "kann ich
mit einem XYZ-JTAG-Kabel auch einen AVR debuggen und wenn ja warum
nicht" füllen die Elektronikforen zuverlässig. Prinzipiell kann man
sagen, jedem Prozessor sein JTAG-"Kabel", wobei das immer mehr ist als
bloss ein Kabel.
Gruss Reinhard