Forum: Compiler & IDEs Debuggen mit CodeBlocks und AVR Dragon


von TM F. (p_richner)


Lesenswert?

Hallo zusammen

Ich habe einen AVR Dragon und möchte über CodeBlocks debuggen.
Die Kommunikation zwischen Controller(Attiny48) - AVR Dragon - und 
avrdude/avarice funktioniert. Ich kann den Controller programmieren mit 
avrdude im Debugwire-Modus.

Wenn ich debuggen starte, kommen folgende Meldungen:
1
Registered new type: wxString
2
Registered new type: STL String
3
Registered new type: STL Vector
4
Connecting to remote target
5
Setting breakpoints
6
Debugger name and version: GNU gdb 6.8
7
Connected
Wenn ich jedoch einen Step weiter gehen will kommt:
1
The program is not being run.
2
Debugger finished with status 0

Das Debugprogramm lade ich mit avarice, was auch funktioniert laut 
Konsole:
1
avarice --dragon --debugwire --program --file ${TARGET_OUTPUT_DIR}${TARGET_OUTPUT_BASENAME}.hex
Ich weiss jedoch nicht warum. Hat jemand eine gute Anleitung oder Lösung 
für das Debuggen?

MfG

: Bearbeitet durch User
von Third E. (third-eye)



Lesenswert?

Ich nutze auch CodeBlocks zum Programmieren von AVRs mit dem AVR-Dragon.
Da ich Linuxnutzer bin, kann ich ja das Atmel Studio nicht nutzen.

Ich weiß nicht genau, was bei dir das Problem ist, aber ich erzähle mal, 
wie ich das mache.

Ich habe mir ein Tool eingerichtet (Menüleiste --> Tools --> Configure 
tools...), welches ein Bash-Skript (im Anhang) ausführt.
Beim Ausführen wird avarice samt Parametern in einer Shell geöffnet und 
wartet auf Verbindung. Dann kann man den eigentlichen Debugvorgang mit 
dem roten Pfeil-Button starten.
Dem Bashskript werden einige im Projekt angelegte "Custom variables" 
übergeben. So muss ich für ein neues Projekt nur diese anpassen.
Du müsstest das Bash-Skript halt in eine Batch-Datei übersetzen.

Die Bilder im Anhang:
1. Debugger-Einstellungen für den avr-gdb
2. Die bereits erwähnten Custom variables in den Build options
3. Die Einstellungen des Tools

Die Debuggerei könnte allerdings besser funktionieren. Z.B:
Man kann zwar Breakpoints setzen, was auch von Code Blocks an avarice 
gemeldet wird. Wenn ich aber Breakpoints entferne, wird dies nicht an 
avarice kommuniziert. Man muss in dem Fall dann das "delete"-Kommando in 
die gdb-Konsole eingeben.
Manchmal hält er zwar an, wenn er einen Breakpoint erreicht, aber dies 
ist nicht sichtbar. Er springt erst in die richtige Zeile, wenn man auf 
"Pause" klickt.
Ist also noch etwas verbuggt, das ganze.

Ich nutze:
Code::Blocks 13.12
avr-gdb 7.6.50.20131218-cvs
AVaRICE version 2.13, Jul  8 2014 19:08:25

Vom avr-gdb gibt es inzwischen eine neuere Version. Die anderen beiden 
Programme sind anscheinend die neuesten Versionen.

Schöne Grüße
Third Eye

von TM F. (p_richner)


Lesenswert?

Danke für deine ausführliche Antwort. Das Problem konnte ich jedoch 
lösen und es funktioniert. Ich habe jetzt folgendes Batch-Skript:
1
cd C:\Directory\bin\Debug\
2
avrdude -p attiny48 -P usb -c dragon_dw -U flash:w:myproject.hex
3
timeout 3
4
avarice --dragon --debugwire --program --file myproject.hex
5
timeout 3
6
avarice --dragon --jtag usb localhost:4242 --debugwire

Ich suche noch eine Lösung, um das Timeout zu ersetzen. Dafür möchte ich 
abfragen, bis der USB-Port freigegeben ist nach vollendeter Übertragung.

Das Debuggen ist bei mir auch manchmal fehlerhaft. Aber mit der Funktion 
"Run to cursor" geht es ganz gut und die Breakpoints muss man auch nicht 
mehr setzen.

: Bearbeitet durch User
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.