Hi. Ich habe ja nun schon oft was von dem JTAG gehört. Kein mir einer kurz erklären, wie es arbeitet, für was ich es einsetze und in welcher form ich den controller (Mega16) Damit überwachen kann. Vielen Dank! Gruß
JTAG erlaubt es, zur Laufzeit den mehr oder minder vollständigen Zustand des Prozessors auszulesen und evtl. auch zu modifizieren. Darin sind auch diverse Debugging-Mechanismen enthalten, wie z.B.Breakpoints. Dazu braucht's ein Interface (google: evertool) und AVR Studio oder das äquivalente Dings im WinAVR (avarice oder so ähnlich). Und natürlich einen AVR der's unterstützt, wie eben den Mega16. Ach ja: Das Flash kann man damit natürlich auch programmieren. JTAG ersetzt also ISP, benötigt aber anders als jenes 4 reservierte Leitungen.
Technisch gesehen ist es auch wiederum nichts anderes als SPI, mit dem Interface als Master und dem Prozessor als Slave. Das Protokoll ist freilich proprietär.
Danke für deine schnelle antwort! Kann ich in meine Programme die ich mit WINAVR erstellt habe auch direkte breakpoints setzen ? Ich denke mal wenn man richtig damit umgehen kann, kann man sich einiges an debugging zeit sparen. Oder lohnt es sich nicht wirklich das teil zu beherrschen ? Arbeitet das JTAG eigentlich einigermaßen in realtime ? Gruß
AVR Studio Debugging und WinAVR vertragen sich recht gut (mit -gdwarf-2 übersetzen). Der µC läuft ganz normal, aber Einblick gibt's nur während der Prozessor steht, weil angehalten oder Breakpoint und dergleichen. Bloss hört natürlich die Welt nicht auf sich zu drehen, bloss weil der µC grad steht, d.h. externe Geräte kriegen nichts davon mit und laufen evtl. auf Timeouts oder andere Probleme. Aber das ist unvermeidlich. Breakpoints sind Hardware - ein paar gibt's von Haus aus (3 oder so), für mehr wird ad-hoc geflasht. Irgendwelche Data Watchpoints gibt's auch, ich habe sie bisher aber nicht verwendet. Ich finde es lohnt sich. Zumal es im Nachbau wenig kostet (Mega16, MAX232, DB9, etwas Hühnerfutter). Wird seriell angeschlossen, also evtl. USB/Ser-Konverter einplanen.
http://de.wikipedia.org/wiki/JTAG Das war ursprünglich dazu gedacht, einen Chip zu testen. Da in der Chipherstellung jeder Hersteller sein eigenes Testequipment entwickelt hat, konnte man die eigenen Chips nicht in fremden Fabriken herstellen lassen. Aus diesem Grunde wurde die Joint Test Action Group gegründet, mit dem Ziel eine einheitliche Schnittstelle zu schaffen. Mit dieser elektrischen Schnittstelle konnte dann eine Fabrik den Chip seines Auftraggebers testen. Dabei nicht vergessen, daß viele kleine Chipproduzenten überhaupt keine eigene Fab haben. JTAG ist erst mal nichts anderes als eine elektrisch definierte Schnittstelle, auf der Daten übertragen werden können. Was übertragen wird, bleibt das Geheimnis des jeweiligen Chipherstellers. Man will sich ja nicht in die Karten schauen lassen. Später entdeckte man die Vorteile des JTAG auch in Mikroprozessoren und CPLDs oder FPGAs. Dort wird es neben dem Testen des Chip auch für die Programmierung desselben verwendet. Vorteil: Man benötigt nur einen Adapter für ein und dieselbe Aufgabe. Leider haben die Hersteller hier das Rad immer wieder neu erfunden und so gibt es unzählige Varianten von JTAG-Adaptern. Im den Mega16 kann man mit dem JTAG Interface seine Programme innerhalb der Hardware debuggen. Das hat mehrere Vorteile. Zum einen ist das ganze nicht simuliert, zum anderen hat man auch seine eigene Hardware, die man so debuggen kann. ciao, Stefan.
@Stefan:
>>Im den Mega16 kann man mit dem JTAG Interface seine Programme
innerhalb
der Hardware debuggen
Was bedeutet "innerhalb der Hardware debuggen"?
MfG
Na Du lötest den Chip auf die Platine mit dem ganzen anderen Geraffel, was Du so brauchst. Mit dem ISP-Adapter kannst Du jetzt nur programmieren und hoffen, daß alles funktioniert. Wenn nicht, dann viel Spaß beim raten, wo er gerade hängt. Mit JTAG kannst Du den Prozessor anhalten, Register auslesen, Breakpoints setzen usw. Alles was man zum debuggen so braucht. Und das ohne Simulation, sondern mit Deiner Schaltung. ciao, Stefan.
klingt ja hoch interessant ! In welchen formen kann man den breakpoints setzen ? Gibt es eine art assembler befehl, der einen break auslöst ? Oder wie kann ich die CPU anhalten ?
Schon mal den AVR Studio Simulator angeworfen? Genau so. Nur eben als Interface nicht den Simulator sondern ICE auswählen.
Gibt es auch eine möglickeit anzuzeigen, welcher c code gerade ausgefügrt wird ? also z.B. Im AVR Studio: -------wirte_mmc(a,c); mov a, b add a, 0x2 mul a, ax <-- Breakpoint mox b, c ... (ist jetzt natürlich frei erfunden) oder kann ich nur asm anzeigen ? dann ist es ja relativ schwer die richtige stelle im Programm zu finden weil man sich an nicht srientieren kann. MfG
Herrje, jetzt probier's halt mal aus. Testprogramm mit WinAVR bauen. Im AVR Studio das ELF File laden, den Debugger mit Simulator anwerfen und damit rumspielen. Notfalls sogar mal Doku lesen. Beantwortet wohl mehr Fragen als Du hier stellen kannst.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.