Forum: Mikrocontroller und Digitale Elektronik Arduino Debuggen


von Robin H. (robin_h)


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

von Rufus Τ. F. (rufus) Benutzerseite


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 ...

von Frickelfritze (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Dazu brauchst Du einen JTAG-Adapter,

Ich sage mal voraus dass es nicht gelingen wird einen
Mega328p wie er auf dem Arduino Uno vorhanden ist, mit
einem JTAG ICE zu debuggen. Das Kürzel JTAG kommt im
Datenblatt des Mega328p nicht vor.

Anders sieht die Sache beim Arduino Mega mit dessen
ATMega2560 aus .....

von spess53 (Gast)


Lesenswert?

Hi

>Das Kürzel JTAG kommt im Datenblatt des Mega328p nicht vor.

Aber Debugwire.

MfG Spess

von Robin H. (robin_h)


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

von Stefan F. (Gast)


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.

von Joachim B. (jar)


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.

: Bearbeitet durch User
von Dennis K. (scarfaceno1)


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...

von Gottfried (Gast)


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.

von Hans (Gast)


Lesenswert?

Hallo,

mit ATMEL Studio 7.X kannst Du Arduino Sketche importieren und dann ganz 
"normal" mit einem AVR-Emulator Debuggen.

Tante Google ist dein Freund.

Ciao

von Gottfried (Gast)


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.
von Maxim B. (max182)


Angehängte Dateien:

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.

von MaWin (Gast)


Lesenswert?

Maxim B. schrieb:
> Debugwire nutzt Mikrocontroller extrem ab.

Werden die dünner? Oder verfärben die Chips sich schwarz?

von Motorola (Gast)


Lesenswert?

MaWin schrieb:
> Werden die dünner? Oder verfärben die Chips sich schwarz?

@MaWin: vor dem Schreiben Hirn einschalten!

Nach jedem breakpoint wird der Controller neu programmiert und die 
Anzahl der  Schreibzyklen einer Zelle im FLASH sind endlich.

von Olaf (Gast)


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.
von Mick (Gast)


Lesenswert?


von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

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.

von Stefan F. (Gast)


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.

von Olaf (Gast)


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

von Stefan F. (Gast)


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.

von Joe G. (feinmechaniker) Benutzerseite


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.

von ohje... (Gast)


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.

von Maxim B. (max182)


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.

: Bearbeitet durch User
von Bernd K. (prof7bit)


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.

von Stefan F. (Gast)


Lesenswert?

Sehr schön gesagt Bernd. Ich stimme Dir total zu.

von GEKU (Gast)


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.

von Thomas E. (thomase)


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.

von Stefan F. (Gast)


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).

von Olaf (Gast)


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

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Bei sowas packt man auch nicht den Debugger aus, sondern den Tracer ;)
Zum Glück haben STM32 mit M3-7 den Traceblock drinne und wir nen J-Trace 
auf Arbeit :>

von Stefan F. (Gast)


Lesenswert?

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

Der war gut.

Aber ja, Eclipse ist bessere Kacke als die Arduino IDE.

von Stefan F. (Gast)


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.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


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.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Stefanus F. schrieb:
> Unter Debuggen verstehe ich allerdings, das Programm anzuhalten,
> irgendwas nachzugucken und dann fortzusetzen. Vermutlich sind die
> Begriffe diesbezüglich nicht eindeutig.

Doch: Debuggen vs Tracen, hatte ich oben geschrieben.

Beitrag #5980664 wurde von einem Moderator gelöscht.
Beitrag #5980682 wurde von einem Moderator gelöscht.
von Einer (Gast)


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.

von Bernd K. (prof7bit)


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.

von Thomas E. (thomase)


Lesenswert?

Stefanus F. schrieb:
> Noch ein Beispiel:

Da kannst du noch so viele Beispiele anführen. Was du da von dir gibst, 
ist einfach nur Schwachsinn.

von Stefan F. (Gast)


Lesenswert?

Thomas E. schrieb:
> Was du da von dir gibst, ist einfach nur Schwachsinn.

Wie du meinst. Wir müssen uns nicht einig werden. Ich bin alt genug, 
damit leben zu können.

von Maxim B. (max182)


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.

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

: Bearbeitet durch Moderator
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Stefan F. (Gast)


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.

von Thomas E. (thomase)


Lesenswert?

Stefanus F. schrieb:
> Trotzdem liebe ich dieses Feature. Ich brauche es nur selten, aber wenn,
> dann bin ich dankbar für diese Möglichkeit.

Dann pass aber auf, daß du deine Wohnung nicht unter Wasser setzt, falls 
du mal wieder deine Waschmaschine debuggen mußt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Stefanus F. schrieb:
> Naja. Mein erster Eindruck vom Debug Wire (mit AVR Studio, Atmel ISP
> MKii) war eher, dass es super lahm ist.

Das lag aber eher am AVR Studio.

von Stefan F. (Gast)


Lesenswert?

Thomas E. schrieb:
> Dann pass aber auf, daß du deine Wohnung nicht unter Wasser setzt, falls
> du mal wieder deine Waschmaschine debuggen mußt.

Mach ich. An der Waschmaschine experimentiere ich nicht und mein 
Modellauto hängt beim Debuggen mit den Rädern in der Luft.

von F. F. (foldi)


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.

: Bearbeitet durch User
von Thomas E. (thomase)


Lesenswert?

Stefanus F. schrieb:
> und mein
> Modellauto hängt beim Debuggen mit den Rädern in der Luft.

Aber dein Roboter läuft beim Debuggen gegen die Wand oder lässt beim 
Geschirrspülen den Teller fallen. Woraufhin deine Frau das persönlich 
nimmt und dir das restliche Geschirr um die Ohren haut. Du soltest nicht 
debuggen, das ist viel zu gefährlich.

von Stefan F. (Gast)


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?

von Thomas E. (thomase)


Lesenswert?

Stefanus F. schrieb:
> Hast du schon das neue Modell mit Entspannungs-Massage? Auch schon das
> Root-Chakra Upgrade probiert?

Ich habe eine echte Masseurin. Die lässt sich nicht debuggen.

von Maxim B. (max182)


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.

: Bearbeitet durch User
von F. F. (foldi)


Lesenswert?

Maxim B. schrieb:
> Das ist zu wenig. Mit JTAG kannst du alle Register

Klar ist das zu wenig, aber bei Arduino eine mögliche und günstige Art 
Fehler einzugrenzen.

Beitrag #5982732 wurde vom Autor gelöscht.
von Maxim B. (max182)


Angehängte Dateien:

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.

von Bernd K. (prof7bit)


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!

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
Noch kein Account? Hier anmelden.