Arduino Debuggen

OP #4632131
Lesenswert?

Hallo zusammen,

ich habe mit Hilfe des MSP430G2553 udn MSP403FR5969 das Programmieren 
von Mikrocontrollern im Studium gelernt. Mittlerweile musste ich auf 
einen Arduino Uno umsteigen, da der von einem anderem Prof vorgegeben 
wird.

Das Programmieren von den Arduino's in den Sketch Dateien und das Nutzen 
des Serial Monitors gefällt mir nicht wirklich.

Zum Programmieren des MSP's habe ich den Code Composer Studio von TI 
genutzt. Hier konnte ich das Programm vernünftig debuggen. Mir wurden 
damit die Registerzustände (Ports, Timer, Interrupts, usw.) angezeigt. 
Ich fande das zum lernen super, da ich im Detail nachvollziehen konnte, 
was genau bei welchem Befehl mit den Registern passiert und zusätzlich 
jeden einzelnen Schritt in Einzelschritten durchgehen und/oder 
Breakpoints setzen.

Gibt es für den Arduino, bzw. für den ATmega 328p auch die Möglichkeit 
den µc so zu debuggen, dass mir die Register des ATmega 328p angezeigt 
werden und ich einzeln durch das Programm "steppen" kann? Mir wäre es 
egal, ob ich das Ding in C oder als Sketch programmiere.

Register View vom CCS: 
https://e2e.ti.com/resized-image/__size/1230x0/__key/communityserver-discussions-components-files/81/reg.png

Viele Grüße und Danke für die Hilfe,
Robin
Persönliche Seite #4632179
Lesenswert?

Robin H. schrieb:
> Gibt es für den Arduino, bzw. für den ATmega 328p auch die Möglichkeit
> den µc so zu debuggen

Dazu brauchst Du einen JTAG-Adapter, der in der AVR-Welt nicht so 
verbreitet und beliebt ist wie beim MSP430 (wo es mit SBW ein 
funktionales Äquivalent gibt).

Die Arduino-Umgebung selbst sieht ein Debuggen nicht vor, da kann man 
nur probieren, ob ein Programm funktioniert.

Wenn Du diesen Nachteil auch auf dem MSP430 haben möchtest, kannst Du 
Dir die Energia-Umgebung ansehen, die nutzen zwar die üblichen 
JTAG-/SBW-Interfaces zum Programmieren, können aber praktischerweise 
auch nicht debuggen ...
OP #4632265
Lesenswert?

Rufus Τ. F. schrieb:
> Wenn Du diesen Nachteil auch auf dem MSP430 haben möchtest
 Ja genau das möchte ich nicht haben :D

spess53 schrieb:
> Aber Debugwire
Dann werde ich mal die Datenblätter nach dem Begriff durchsuchen und mal 
weiter googlen.

Das einzige was ich gefunden habe, ist das "Debuggen" über (ich glaube) 
ISP, bei dem man Breakpoints setzt und Aktionen in die Breakpoints 
schreibt. Naja, wirkt erstmal so wie das Serielle Lesen, nur das es in 
einer anderen Oberfläche präsentiert wird. Ist auch nicht das was ich 
wirklich suche. Vor allem vermisse ich das durchgehen des Programms in 
Einzelschritten in C auf dem Arduino Uno.

Danke schon mal für alle Antworten. Mal schauen was sich noch raus 
finden lässt. Ansonsten bleibt nur das serielle Auslesen über den Serial 
Monitor...

Grüße,
Robin
Gast #4632278
Lesenswert?

Manche AVR's haben ein JTAG Interface zum Debuggen.

Viele andere wiederum haben den DebugWire, das ist physiskalisch 
betrachtet der Reset Pin. Den muss man jedoch über ISP aktivieren. Also 
benutzt man in der Praxis zu Debuggen über DebugWire den ISP Anschluss.

Du hast richtig erkannt, dass das Debuggen über DebugWire im Prinzip 
darauf hinaus läuft, Unterbrechungspunkte zu setzen, wo der Controller 
angehalten wird und dann kann man rein schauen. Ohne Unterbrechungspunkt 
kann man sie nicht debuggen.

> Vor allem vermisse ich das durchgehen des Programms in
> Einzelschritten in C auf dem Arduino Uno.

Die Arduino IDE kann das nicht, wohl aber das Atmel Studio. Schau es Dir 
dort mal an.
#4632293
Lesenswert?

Rufus Τ. F. schrieb:
> Die Arduino-Umgebung selbst sieht ein Debuggen nicht vor, da kann man
> nur probieren, ob ein Programm funktioniert.

leider da hilft nur brain 4.0 und Debugausgaben, das macht es etwas 
unbequem ist aber möglich.

Grundsätzliche Sachen kann man ja in anderer Umgebung testen um Fehler 
im Code oder Unzulänglichkeiten der Arduino IDE zu entdecken.
Ich weiche da gerne auf AVR Studio oder LCC32 aus.

Funktioniert eine Sub in den genannten hatte ich auch keine Probleme die 
in Arduino zu nutzen.
#4632299
Lesenswert?

Stefan U. schrieb:
> Die Arduino IDE kann das nicht, wohl aber das Atmel Studio. Schau es Dir
> dort mal an.

Das wäre auch mein Vorschlag.
Zu Beginn hast du geschrieben:

Robin H. schrieb:
> Mir wäre es
> egal, ob ich das Ding in C oder als Sketch programmiere.

Dann setzt dich mal mit dem AtmelStudio außeinander. Hier kannst du 
alles in C programmieren und dann mit einem Programmer auf den Mega328 
flashen.
JTAG hat der kleine µC leider nicht. Aber du könntest hier zumindest
im Simulator schonmal deine Registerwerte überprüfen. Dort hast du alle 
von
dir gewünschten Werte. Wenn das nicht reicht, dann wie gesagt über 
DebugWire arbeiten.

Hab ich allerdings selbst auch noch nicht gemacht...
Gast #5979816
Lesenswert?

Der Debugwire funktioniert genauso, wie JTAG, ist nur eine andere 
Schnittstelle, bevor das JTAG gekommen ist.

Auf dem ARDUINO Board sollte der auf keinen Fall benutzt werden, sondern 
nur das ISP (wenn man einen anderen Bootloader braucht).
Da am Arduino am Reset Pin ein ziemlich fetter 100nF Kondensator ist. 
Dieser verhindert das Debuggen mittels Debugwire.

Einen Nano versuchte ich zu debuggen mit dem Atmel-ICE, daraufhin war 
der ATmega verfused.
Um diesen zu reparieren, kann man noch versuchen diesen mittels 
Oscillatorschaltung am XTAL einzuspeisen, wärend man die Fuses schreibt. 
Wenn das nicht funktioniert, dann geht es nur noch mit 
High-Voltage-Programmer, hier ist allerdings bei jedem Atmel chip eine 
andere Schaltung notwendig.
Gast #5979907
Lesenswert?

Das ist extrem langsam.
Und man kann keine externe Hardware debuggen, z.B. Ports, I²C, SPI, 
Interrupts, Timer, ADC usw. (War ja die Ausgangsfrage)

Aber wenn man den Kondensator vom Reset-Pin auf dem Arduino ablötet, 
kann man den für debugWire verwenden. Allerdings muss später der 
Bootloader wieder geflasht werden und der Kondensator wieder angelötet 
werden, wenn dieser wieder als Arduino verwendet wird.
Beitrag #5979913 wurde von einem Moderator gelöscht.
#5980098
Lesenswert?

Gottfried schrieb:
> Der Debugwire funktioniert genauso, wie JTAG, ist nur eine andere
> Schnittstelle, bevor das JTAG gekommen ist.

Debugwire nutzt Mikrocontroller extrem ab.
Ich verwende gerne Platine von Arduino Mega2560. Ich habe dafür eine 
Adapterplatine gemacht (sie dient auch für andere Fälle). So kann ich 
JTAG bequem einschließen.
Angehängte Dateien:
Gast #5980160
Lesenswert?

> @MaWin: vor dem Schreiben Hirn einschalten!

Also da muss ich MaWin aber mal in Schutz nehmen. Es kann doch niemand 
ahnen das die AVR so ein Murks sind und noch nicht mal fuer 1-2 
Breakpoints ein spezielles Register haben.

Olaf
Beitrag #5980176 wurde von einem Moderator gelöscht.
Gast #5980270
Lesenswert?

Olaf schrieb:
> Es kann doch niemand ahnen das die AVR so ein Murks sind

Man muss das im Kontext der Zeit sehen, zu der diese Chips erstmalig 
veröffentlicht wurden. Vorher konnte man Mikrocontroller grundsätzlich 
nicht debuggen. Da war diese abgespeckte Krücke, die in AVR und viele 
andere Mikrocontroller eingebaut wurde schon ein Segen.

Allerdings: Eben weil es sehr langsam ist und ich meine µC nicht kaputt 
debuggen möchte, nutze ich dieses Feature nur selten.

In vielen Fällen muss ich den ganzen Aufbau stark modifizieren, um 
überhaupt debuggen zu können. Wenn ich z.B. das Programm einer 
Waschmaschine im Debugger anhalte, könnte sie mit Wasser überfluten. 
Wenn ich einen fahrenden Roboter mit dem Debugger anhalte, könnte er 
gegen die nächste Wand knallen.

Ich komme meistens mit Logmeldungen besser klar, die im Release-Build 
weg gelassen werden.

Andere Baustelle:
Auf der Arbeit programmiere ich Backend Services für Internet-Dienste. 
Dort schreibe ich die Debug Meldungen in einen Ringpuffer. Wenn ein 
Fehler erkannt wird, schreibe ich den Inhalt des Puffers + die 
Fehlermeldung ins Logfile. So kann ich nachträglich analysieren, wie es 
zum Fehler gekommen ist. Das kostet im Schnitt ca. 3% Performance, dies 
es Wert sind.
Gast #5980301
Lesenswert?

> Man muss das im Kontext der Zeit sehen, zu der diese Chips erstmalig
> veröffentlicht wurden. Vorher konnte man Mikrocontroller grundsätzlich
> nicht debuggen.

Doch konnte man, deshalb bin ich damals vom Mega8 zu Renesas gegangen 
weil das da einfach und kostenlos moeglich war. (KD30 mit M16C) In der 
Firma hab ich zu der Zeit den 68332 genutzt weil der auch ein BDM hatte.

Ausserdem sollte man doch annehmen das ein Hersteller seine Produkte mit 
der Zeit verbessern kann! Er braucht ja nur bei anderen abzuschreiben.

> Ich komme meistens mit Logmeldungen besser klar, die im Release-Build
> weg gelassen werden.

Gerade fuer jemanden der lernen will, also noch Student ist, ist ein 
Debugger unverzichtbar weil man nur so effizient und schnell begreift 
was in einem Controller abgeht. Gerade bei Anfaengern ist es doch so das 
der Compiler aus ihrem C-code etwas ganz anderes macht als sie glauben. 
Wenn die nur einmal in einer Minute im Singlestep durch den Code gehen 
haben die mehr gelernt als in 2h printf.

Oh..und die Existenz eines Debuggers heisst nicht das man nicht auch mal 
Fehlermeldungen anderweitig ausgeben kann! Es ist nur der erste 
Loesungsansatz.

Olaf
Gast #5980309
Lesenswert?

Olaf schrieb:
> Ausserdem sollte man doch annehmen das ein Hersteller seine Produkte mit
> der Zeit verbessern kann!

Was ja auch geschehen ist. In der Xmega Serie gibt es Hardware 
Breakpoints.

> Gerade fuer jemanden der lernen will, also noch Student ist, ist ein
> Debugger unverzichtbar weil man nur so effizient und schnell begreift
> was in einem Controller abgeht.

Ist auf jeden Fall hilfreich. Ich hatte mich anfangs mit dem Simulator 
begnügt (weil der Atmel Debugger so teuer war), das war schon lehrreich 
genug.
Persönliche Seite #5980312
Lesenswert?

Robin H. schrieb:
> Gibt es für den Arduino, bzw. für den ATmega 328p auch die Möglichkeit
> den µc so zu debuggen, dass mir die Register des ATmega 328p angezeigt
> werden und ich einzeln durch das Programm "steppen" kann?

Wenn es unbedingt ein Arduino Board sein muss, der Arduino UNO WIFI REV2 
hat einen ATMega 4809 verbaut. Dieser besitzt eine UPDI Schnittstelle 
(Single pin programming and debugging interface). Damit kann direkt auf 
Hardwareebene debuggt werden. Muss es kein Arduino Board sein, kann man 
schon mit einem Curiosity Atmega4809 Nano beginnen.
Gast #5980328
Lesenswert?

MaWin schrieb im Beitrag #5980176:
> Olaf schrieb:
>> @MaWin: vor dem Schreiben Hirn einschalten!
>>
>> Also da muss ich MaWin aber mal in Schutz nehmen. Es kann doch niemand
>> ahnen das die AVR so ein Murks sind und noch nicht mal fuer 1-2
>> Breakpoints ein spezielles Register haben.
>> Olaf
>
> Danke! Wenigstens einer der meinen Intellekt zu würdigen weiß

Viele IDEs nutzen zum debuggen Software-Brekpoints.

Und da wird mit dem Setzen eines Breakpoints jedesmal ein Schreibvorgang 
auf das Flash gemacht. Üblicherweise wird aber nur eine Page 
geschrieben, nicht der ganze µC. So unüblich ist das gar nicht, wie du 
jetzt darstellen willst.
Bei üblicherweise 10k Schreibvorgängen hält ein µC da durchaus eine 
Weile durch.

Also ist das gar nicht so ungewöhnlich, wie du denkst, und deine 
Überraschung ist nur Unwissen auf deiner Seite.
#5980337
Lesenswert?

Mw E. schrieb:
> Das hat dann aber nichts mit DebugWire selbst zu tun, sondern is unter
> JTAG genauso.

Mit JTAG kann man auch ohne Brekpoints gehen, einfach "Run to Cursor" 
und weiter Schritt zu Schritt, und alle Register und Variablen an einer 
verdächtigen Stelle beobachten. Mit DebugWire habe ich das noch nicht 
versucht, aber mit JTAG wird dabei Mikrocontroller nicht umprogrammiert.

Aber Atmel selbst warnt vor Abnutzung mit DebugWire, es steht aber 
nichts Ähnliches für JTAG.
#5980354
Lesenswert?

Olaf schrieb:
> Gerade fuer jemanden der lernen will, also noch Student ist, ist ein
> Debugger unverzichtbar weil man nur so effizient und schnell begreift
> was in einem Controller abgeht.

Auch später ist die Existenz eines Debuggers ein liebgewonnenes Werkzeug 
auf das man nur ungern verzichten möchte, er ist in vielen Situationen 
hilfreich und kann viel Zeit sparen.

Aber jetzt bekommt der Threadersteller erzwungenermaßen die Gelegenheit 
zu erfahren wie es ist wenn man ohne Debugger auskommen muß und sich 
spezielle Debuggingtechniken und spezielle Kniffe für solche Fälle 
anzueignen, das kann sich später irgendwann mal als sehr nützlich 
erweisen. Zusätzlich wird er noch gezwungen eine vollkommen verkrüppelte 
und nahezu funktionslose IDE zu benutzen und die erfolgreiche Bezwingung 
all dieser pädagogisch auferlegten Handicaps kann ihn unterm Strich nur 
besser und erfahrener machen! Er wird hinterher die Vor- und Nachteile 
besser einschätzen können und bessere Entscheidungen bei der Auswahl der 
Werkzeuge treffen können.
Gast #5980363
Lesenswert?

ohje... schrieb:
> Und da wird mit dem Setzen eines Breakpoints jedesmal ein Schreibvorgang
> auf das Flash gemacht

Es gibt auch MC, die eine eigene Debuglogik eingebaut haben. Diese führt 
einen Adressvergleich mit dem IP durch und löst bei Übereinstimmung 
einen Interrupt aus. Dafür benötigt man kein Umschreiben des Codes im 
FLASH.
#5980595
Lesenswert?

Stefanus F. schrieb:
> In vielen Fällen muss ich den ganzen Aufbau stark modifizieren, um
> überhaupt debuggen zu können. Wenn ich z.B. das Programm einer
> Waschmaschine im Debugger anhalte, könnte sie mit Wasser überfluten.
> Wenn ich einen fahrenden Roboter mit dem Debugger anhalte, könnte er
> gegen die nächste Wand knallen.

Was ist denn das für ein an den Haaren herbeigezogener Schwachsinn? 
Niemand kommt auf die Idee, seine Waschmaschine zu debuggen. Und das mit 
dem Roboter, der gegen die Wand fährt, scheitert schon am Aufbau.
Gast #5980610
Lesenswert?

Thomas E. schrieb:
> Was ist denn das für ein an den Haaren herbeigezogener Schwachsinn?

Das ist kein Schwachsinn. Viele Systeme fallen in dem Moment aus, wo du 
das laufende Programm einer Komponente anhältst.

Selbst im Job (Web Anwendungen im Backend) kann ich nicht einfach den 
Server beliebig lange anhalten, weil sonst die Clients in einen Timeout 
laufen und infolge dessen danach etwas ganz anderes machen, als im 
Normalbetrieb.

Noch ein Beispiel:
Eine gemultiplexte 7-Segemtn Anzeige darfst du in der Regel nicht 
einfach anhalten, weil dabei das gerade leuchtende Segment durchbrennt 
(oder zumindest geschädigt wird).
Gast #5980611
Lesenswert?

> erweisen. Zusätzlich wird er noch gezwungen eine vollkommen verkrüppelte
> und nahezu funktionslose IDE zu benutzen und die erfolgreiche Bezwingung
> all dieser pädagogisch auferlegten Handicaps kann ihn unterm Strich nur

Du meinst sein Gehirn wird schonmal weichgekocht damit er spaeter 
Eclipse fuer ein brauchbares Stueck Software haelt? :-D

> Was ist denn das für ein an den Haaren herbeigezogener Schwachsinn?

Naja, es gibt schon Faelle wo man nach einem Breakpoint nicht einfach so 
weitermachen kann. Ein einfaches Beispiel ist z.b ein Temperaturregler.
Trotzdem kann ein Debugger auch da ganz nett sein weil man halt einfach 
mal den Systemzustand an einem bestimmten Punkt ablesen kann.

Fuer so Problemfaelle hab ich mir im uebrigen eine eigene Software 
geschrieben die ueber den j-Link beliebige Variablen aus dem laufendem 
Programm ausliest. Bei ARMs ist da ja moeglich.

BTW: In aller Regel nutze ich den Debugger natuerlich auch aus einer 
grafischen Umgebung raus. Trotzdem kann ich nur empfehlen sich auch mal 
mit dem gdb auf der Kommandozeile zu beschaeftigen. Der kann naemlich so 
ungefaehr 100x mehr als man denkt. Damit kann man sich dann retten wenn 
man einen sehr komplexen Bug hat. Das ist dann wie das Paradies auf 
Speed.

Olaf
Gast #5980616
Lesenswert?

Olaf schrieb:
> Bei ARMs ist da ja moeglich.

Geht auch mit Registern. Ich finde beides sehr praktisch.

Unter Debuggen verstehe ich allerdings, das Programm anzuhalten, 
irgendwas nachzugucken und dann fortzusetzen. Vermutlich sind die 
Begriffe diesbezüglich nicht eindeutig.
(Firma: fritzler-avr.de) #5980620
Lesenswert?

Weil sich Olafs Post mit meinem überschnitten hat:

Olaf schrieb:
> Du meinst sein Gehirn wird schonmal weichgekocht damit er spaeter
> Eclipse fuer ein brauchbares Stueck Software haelt? :-D

DER war richtig gut!

Olaf schrieb:
> Fuer so Problemfaelle hab ich mir im uebrigen eine eigene Software
> geschrieben die ueber den j-Link beliebige Variablen aus dem laufendem
> Programm ausliest. Bei ARMs ist da ja moeglich.

Das hat Segger schon für dich geschrieben -> J-Scope.
Ansonsten kann Ozone auch Variablen im Watchfenster in einem gewissen 
Intervall neua auslesen und live anzeigen.
Mit Diagrammen als Verlauf geht das auch (also J-Scope in Ozone 
eingebaut).

Damit konnte ich mir dann die Lüftersteuerung meiner E-Last einstellen.
(PI(D) Regler der Lüfterspannung nach Temperatur)

Ansonsten gibts noch Systemview, das zeigt dir dann auch an wie zB 
FreeRTOS scheduled. Falls man mal nen deadlock suchen muss.
Beitrag #5980664 wurde von einem Moderator gelöscht.
Beitrag #5980682 wurde von einem Moderator gelöscht.
Gast #5980698
Lesenswert?

Maxim B. schrieb:
> Mit JTAG kann man auch ohne Brekpoints gehen, einfach "Run to Cursor"
> und weiter Schritt zu Schritt, und alle Register und Variablen an einer
> verdächtigen Stelle beobachten. Mit DebugWire habe ich das noch nicht
> versucht, aber mit JTAG wird dabei Mikrocontroller nicht umprogrammiert.

Ich glaube da täuschst du dich.
"Du" setzt da keine Breakpoints deine Entwicklungsumgebung aber schon.
#5980701
Lesenswert?

MaWin schrieb im Beitrag #5980682:
> MaWin schrieb im Beitrag #5980664:
>> Autor: MaWin (Gast)
>> [...]

Ich kannte mal eine Frau die hatte 2 Persönlichkeiten. Die eine war 
unsterblich in mich verknallt und hat mir den Kopf verdreht und die 
andere konnte mich überhaupt nicht leiden und war eher an meinem 
Nachbarn interessiert. Und die eine wußte anscheinend nie was die andere 
in ihrer Abwesenheit getan hat und stritt es vehement ab. Das war ein 
kurzer aber intensiver Höllenritt kann ich euch sagen, ich wußte nie 
neben welcher ich morgens aufwache, ich hab nach einer Woche reißaus 
genommen.
#5980772
Lesenswert?

Einer schrieb:
> Ich glaube da täuschst du dich.
> "Du" setzt da keine Breakpoints deine Entwicklungsumgebung aber schon.

Nein. So eine Sache wie Umprogrammieren braucht Zeit. Das kann nicht in 
Mikrosekunden passieren. Auch Breakpoints mit JTAG führen nicht zu 
Umprogrammieren.

Sollte wirklich "Break" einprogrammiert werden, so sollte das zu 
Umrechnen von allen Adressen und Neuprogrammieren von Flash führen. Das 
passiert aber nicht.
Moderator Persönliche Seite #5982478
Lesenswert?

Mw E. schrieb:
> Motorola schrieb:
>> Nach jedem breakpoint wird der Controller neu programmiert und die
>> Anzahl der  Schreibzyklen einer Zelle im FLASH sind endlich.
>
> Das hat dann aber nichts mit DebugWire selbst zu tun, sondern is unter
> JTAG genauso.

Nein. Die AVRs mit JTAG haben schon immer Hardware Breakpoints gehabt, 
Soft BPs konnte natürlich der Debugger zusätzlich benutzen, wenn er 
wollte. Bei der JTAG debug engine kann man auch zwei der insgesamt vier 
Breakpoint-Register für einen Daten-Breakpoint (Adresse + Bereich) 
benutzen. Das ging schon immer bei den Megas, aber AVR Studio hat erst 
sehr spät gelernt, das zu unterstützen. ;-)

debugWIRE ist dagegen weiter nichts als ein Monitor-ROM, die anfängliche 
Bezeichnung (die man noch an ein oder zwei Stellen in der Doku finden 
kann) war "MonCon". Das ist nicht viel anders als die Monitor-Programme 
früherer Mikroprozessorsysteme, um hier einen Breakpoint zu setzen, muss 
man halt explizit im Programmspeicher einen BREAK-Befehl hinterlassen. 
Datenbreakpoints gibt es hier natürlich nicht.

debugWIRE ist übrigens jünger als die voll ausgefeilten debug engines 
der älteren AVRs mit JTAG; der einzige Grund, es überhaupt (und in 
dieser Form) einzuführen war, dass man auf diese Weise auch den kleinen 
ATtinys überhaupt  zu einem Online-Debugging verhelfen konnte; JTAG ist 
auf die Megas beschränkt, da es insgesamt aufwändiger ist (mehr Drähte 
für die Steuerung, mehr Chipfläche).

Allerdings ist der bei den Arduinos so populäre ATmega328 halt kein 
„richtiger Mega“, sondern nur ein „aufgebohrter Tiny“ (einschließlich 
des Hardwaremultiplizierers der Megas), daher hat man ihm auch nur 
debugWIRE spendiert.
Moderator Persönliche Seite #5982484
Lesenswert?

Maxim B. schrieb:
> Sollte wirklich "Break" einprogrammiert werden, so sollte das zu
> Umrechnen von allen Adressen und Neuprogrammieren von Flash führen.

Nein. Es wird einfach statt des originalen Befehls ein BREAK 
programmiert. Beim Erreichen des BREAK programmiert der Debug-Dongle 
(also das ICE) automatisch den ursprünglichen Befehl zurück, sodass 
dieser als nächstes ausgeführt wird. Daher ist es auch verdammt wichtig, 
die debugWIRE-Session sauber zu beenden. Schaltet man einfach nur 
zwischendrin aus, bleibt der BREAK stehen, und das Wissen über den 
ursprünglich an dieser Stelle befindlichen Befehl geht verloren. Dann 
hilft nur ein komplettes Neuprogrammieren.

Das Ganze geht erstaunlich schnell; ich hatte damals erwartet, dass 
debugWIRE Debugging deutlich langsamer wäre als JTAG Debugging. Ist es 
nicht.
Gast #5982495
Lesenswert?

Jörg W. schrieb:
> Das Ganze geht erstaunlich schnell;

Naja. Mein erster Eindruck vom Debug Wire (mit AVR Studio, Atmel ISP 
MKii) war eher, dass es super lahm ist. Wobei ich bis dahin noch nie 
zuvor Mikrocontroller debuggt habe.

STM32 mit SWD Schnittstelle (und ST-Link Adapter) ist da schon um Welten 
schneller. Der eine Draht mehr lohnt sich scheinbar.

Trotzdem liebe ich dieses Feature. Ich brauche es nur selten, aber wenn, 
dann bin ich dankbar für diese Möglichkeit.
#5982515
Lesenswert?

Ich habe im Anfang bei Arduino eine Led in den Ablauf eingebaut.
Ist natürlich nichts gegen richtige Werkzeuge, hilft aber für den 
Anfang.
Einfach an einem freien Pin anschließend und immer ein Stück weiter 
durch den Programmablauf schieben.
Wenn man noch keinen LA oder Oszi hat, kann das bei einfachen Programmen 
helfen.

Nachtrag:
Gerade im Anfang unterschätzt man die Geschwindigkeit, mit der so ein 
Programm abläuft.
Gast #5982535
Lesenswert?

Thomas E. schrieb:
> Aber dein Roboter läuft beim Debuggen gegen die Wand

Ja, das ist noch einer aus der alten Serie, mit dem Bug wo er 
epileptische Anfälle bekommt, wenn man im selben Raum Fortnite spielt.

Hast du schon das neue Modell mit Entspannungs-Massage? Auch schon das 
Root-Chakra Upgrade probiert?
#5982588
Lesenswert?

F. F. schrieb:
> Einfach an einem freien Pin anschließend und immer ein Stück weiter
> durch den Programmablauf schieben.
> Wenn man noch keinen LA oder Oszi hat, kann das bei einfachen Programmen
> helfen.

Das ist zu wenig. Mit JTAG kannst du alle Register und alle SRAM-Zellen 
sehen, was dort im Moment passiert. manchmal stört zwar Optimieren von 
Compiler dabei, aber man kann für Zeit einige Variablen als static oder 
volatile erklären, um sie sehen zu können.

Jörg W. schrieb:
> Es wird einfach statt des originalen Befehls ein BREAK
> programmiert. Beim Erreichen des BREAK programmiert der Debug-Dongle
> (also das ICE) automatisch den ursprünglichen Befehl zurück, sodass
> dieser als nächstes ausgeführt wird.

Dann ist vielleicht Abnutzen von Flash doch nicht so hoch, wenn nur eine 
Speicherzelle umprogrammiert wird? Man setzt Breakpoint ja immer auch 
verschiedenen Stellen.
Beitrag #5982732 wurde von einem Moderator gelöscht.
#5982753
Lesenswert?

F. F. schrieb:
> aber bei Arduino

Dann sollte man lieber Arduino Mega 2560 benutzen. Dort kann man 
unkompliziert JTAG anschließen, mit einfachen Adaptern oder gar per 
Draht. SPI-Buchse gibt es sowieso, man sollte zuerst per SPI JTAG 
einschalten und evtl. Bootloader löschen. Dann kann man ruhig mit C 
debuggen.
Solange IDE von Arduino mit JTAG nicht arbeiten kann, benutzt man lieber 
was anderes. Aber Platine ist zu gebrauchen. Ich habe in meinem Programm 
für PCB die Platine von Arduino als Modul gemacht, so kann ich diese 
Platine wie andere Mikrocontroller auch frei nutzen.
Angehängte Dateien:
#5983088
Lesenswert?

Thomas E. schrieb:
> Aber dein Roboter läuft beim Debuggen gegen die Wand oder lässt beim
> Geschirrspülen den Teller fallen.

Man muss halt 2 Sekunden nachdenken bevor man einen Breakpoint setzt. 
Notfalls ändert man vorher den Code so daß die Motoren oder was auch 
immer die ganze Zeit über in der sicheren Position verbleiben oder 
schaltet sie von Hand ab oder dreht das Wasser von Hand zu wenn der 
Breakpoint triggert oder stellt vorher nen Eimer drunter. Oder nen 
Schlauch zum Abfluss. Bisschen Phantasie und Kreativität braucht man 
halt schon in dem Job!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren