Forum: Mikrocontroller und Digitale Elektronik AVR Dragon, DebugWire und Linux


von Markus (Gast)


Lesenswert?

Hi,
wie sieht es denn eigentlich mit Debugging unter Linux aus? Bisher hab 
ich nur GDB gesehen und hab keine Ahnung wie der funktioniert.

Gibts es etwas annähernd vergleichbares zb zum Source Level Debugging 
via DebugWire im AVR Studio unter Linux?

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


Lesenswert?

Du kannst den GDB via AVaRICE auf ein JTAG ICE oder einen AVR Dragon
loslassen, damit kann er wahlweise JTAG oder debugWire benutzen.

Der GDB ist auf jeden Fall völlig anders als AVR Studio.  Er kann
manche Dinge nicht, die AVR Studio kann, in anderen Dingen ist er
dagegen haushoch überlegen (bspw. der Darstellung beliebiger
C-Ausdrücke einschließlich typecasts usw.).  Für die Bedienung
gibt's mehr als ein mögliches grafisches Frontend, wobei sich DDD
offenbar allgemeiner Beliebtheit erfreut, oder aber du benutzt die
Integration des GDB in den Editor deiner Wahl, der damit zusammen
dann zu einer IDE wird.

von Markus (Gast)


Lesenswert?

ok, klingt schonmal gut das es geht. mal schauen ob ich das irgendwie 
hinkriege

von Rolf Magnus (Gast)


Lesenswert?

Insight wäre noch eine andere GUI-Variante.

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


Lesenswert?

DDD scheint allgemein beliebter zu sein als Insight.  Dass DDD bei
WinAVR nicht dabei ist, liegt insbesondere daran, dass es sich nicht
unter/für Win32 bauen lässt.

Anyway, bevor du irgendwann fragst: größter Schwachpunkt des AVR-GDB
ist im Moment, dass er keine Methode hat, symbolisch auf IO-Register
zuzugreifen.  Ich suche hier noch Ideen, wie man ihm das über die
Debuginformationen aus dem ioXXX.h mit rüberreichen kann.  Das alte
"info io_registers" ist nur für wenige AVRs überhaupt implementiert
worden und ist meiner Meinung nach eher eine miese Krücke (man kann
nur alle IO-Register auf einmal anzeigen), sodass ich es müßig finde,
da weiter dran zu schrauben.  Da man auf alle IO-Register über
Speicheradressen zugreifen kann, sollte eigentlich im GDB alles
vorhanden sein, was man dafür braucht, so man denn die symbolischen
Informationen rüberbekommt.

Derweil kann man sich einfach mit dem x-Kommando behelfen, das ja
eine beliebige Speicherstelle anzeigen kann.  Mein Kollege wickelt
sich darum dann gern einen GDB-Makro für seine am häufigsten benötigten
IO-Register.

Außerdem: der AVR-GDB wurde noch nicht bisher für DWARF-2 angepasst.
Bitte compiliere mit -gstabs statt -gdwarf-2.  Ob -g ohne etwas
DWARF-2 oder stabs erzeugt, ist eine Frage, wer den Compiler beim
Bauen wie konfiguriert hat.  WinAVR hat DWARF-2 als Voreinstellung,
ich habe bei FreeBSD (wegen AVR-GDB's Möglichkeiten) stabs als
Voreinstellung.

von Michael W. (wiebel42)


Lesenswert?

Juhu endlich mal jemand der sich damit auskennt. ;)
thread kaper

Wie arbeite ich eigentlich mit der toolchain wenn ich Assembler 
Programiere?
Hab noch nicht mit C angefangen und wollte mal sehen ob ich mit avarice 
und gdb klarkomme bin aber kläglich gescheitert da ich schlich nicht 
kapiert hab was ich avarice und gdb vorsetzen soll (hex, obj, asm). 
-wiebel

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


Lesenswert?

Der Assembler kennt auch ein -gstabs, dann erzeugt er selbstständig
line number debugging information.  Debuginformationen zu deinen
Variablen müsstest du allerdings selbst mitbringen.

von Siegward J. (siegward)


Lesenswert?

Ich hatte nach einer Methode gesucht, wie ich möglichst komfortabel in 
DDD IO-Register ändern kann und bin bei meiner Recherche auf diesen 
Thread gestoßen.

Ich habe jetzt eine Methode gefunden, die einigermaßen komfortabel ist 
(am Beispiel PORTA mit Adresse 0x3b):

- Im Menü von DDD das Fenster 'Data/Displays' öffnen.
- Den Knopf 'Display...' anklicken.
- '*(char*)0x3b' eintippen und den Knopf 'Display' anklicken.
- Im Fenster 'DDD: Displays' die Zeile mit '*(char*)0x3b' markieren und 
den Knopf 'Set' anklicken.
- Im neuen Fenster 'DDD:Set Value' den neuen Wert eingeben. Mit 'Apply' 
wird er gesetzt.

Das Fenster 'DDD: Displays' kann dann geschlossen werden und das Fenster 
'DDD:Set Value' an eine passende Stelle am Bildschirm positioniert 
werden. Zum Testen kann man damit LEDs an- und ausschalten.

Wenn man so mehrere Ports im Zugriff haben will, stört es natürlich, 
dass die Fenster keine sprechenden Namen haben, sondern nur die 
(dezimale!!!) Adresse. Aber damit kann man wohl leben.

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.