Forum: Compiler & IDEs AVR Programme unter Linux Debuggen


von Sebastian Mazur (Gast)


Lesenswert?

Hallo,
Kann mir bitte jemand sagen, wie ich meine AVR-Assembler Programme
unter Linux debuggen kann???

Es gibt ja den simulavr der mit Verbindung mit gdb bzw. avr-gdb
funktioniert, nur das Problem liegt darin, daß er keine .hex sondern
nur .out Dateien akzeptiert.
Mit AVR-GCC kann ich ja auch solche erzeugen und das klappt mit
simularvr auch gut, aber assembler, die ich ausprobierthabe (avra,
tavrasm, gavrasm) wollen keine .out Dateien erzeugen :-(
AVRStudio krieg ich mit Wine auch nicht am laufen...
Muß ich wirklich Windows installieren um meine Programme zu debuggen ?

Danke für die Aufmerksamkeit
Sebastian

von Sebastian Mazur (Gast)


Lesenswert?

Danke, daß mein Beitrag verschoben wurde...
So habe ich auch Antwort auf meine Frage gefunden :-D
Und zwar, nur falls das jemanden interessiert avr_simulator, gibt es
bei sourceforge, scheint ganz gut zu sein,
werde es jetzt mal Testen,
danke nochmals, auch fur keine Antworten :-)

Gruß Sebastian

von Henning (Gast)


Lesenswert?

und was haben deine Tests so gezeigt?
oder bist du noch dabei?

von Sebastian Mazur (Gast)


Lesenswert?

Hallo Henning,
Auf den ersten Blick war ich positiv von dem Programm überrascht,
die einfachsten Sachen hat es gut simuliert (Register setzen und
lesen)
Aber dann habe ich mir gedacht, daß ich zu doof bin einen Timer mit
Interrupts zu Programmieren, weil der Timer zwar lief, aber keine
Interrupts ausgelöst hat :-(
Habe mein Timerprogramm heute auf einer Windoof Kiste unter Studio
laufenlassen und es klappt super, also liegt es an avr_simulator,
vieleicht stimmt was nicht mit den Vektoradressen oder so, schade
eigentlich, ich habe schon gedacht, ich habe endlich meinen Simulator
gefunden....
Kann auch sein, daß ich irgendwo einen Fehler bei der Installation
gemacht habe, das kann ich mir aber nicht so vorstellen,
vielleicht gibt es jemanden, der das Programm kennt und auch was
dazusagen kann?
Achso, ich habe den ATMEGA 8 simuliert, heute versuche ich es mit dem
16  vieleicht geht es dann
Gruß Sebastian

von Jörg Wunsch (Gast)


Lesenswert?

Erstens sollte klassisches simulavr auch ihex-Dateien lesen können, da
die zugrundeliegende libbfd das kann.  Die Option -F suggeriert
zumindest, dass man ein Dateiformat angeben kann, eventuell
funktioniert sogar eine automatische Erkennung.

Zweitens muss man simulavr eigentlich gar keine Datei mitgeben, wenn
man ihn mit dem GDB nehmen will, da man das Programm auch stets aus
dem GDB in den Simulator laden kann.

GDB wiederum basiert auch auf libbfd und kann damit auch ihex-Dateien
lesen.  Allerdings fehlt ihm dann jegliche Information über den Inhalt
des zu debuggenden Targets, da ihex keinerlei Symboltabellen mit sich
bringt.  Aber funktionieren tut's:

% avr-gdb -q delaytest.hex
(no debugging symbols found)
(gdb) info file
Local exec file:
        `/home/joerg/src/avr/test/delaytest.hex', file type ihex.
        Entry point: 0x0
        0x00000000 - 0x00001758 is .sec1

(Hier könnte man mit "target remote" zum Simulator verbinden und mit
"load" das Image in den Simulator pumpen.)

Inwiefern das auch mit dem Nachfolger simulavrxx tut, hab' ich jetzt
keine Ahnung.  Meines Wissens kann man den auch noch nicht unter
Windows compilieren lassen.

von Sebastian Mazur (Gast)


Lesenswert?

@Jörg

Danke für Deine Antwort, aber genauso habe ich es gemacht, also den
simulavr als gdb server process gestartet mit der Angabe von dem
Device
und dann in den gdb selber die .hex Datei geladen.
Nur wenn ich damit den simulavr füttern will krieg ich folgende
Fehlermeldung:
Memory access error while loading section .sec1.

und wenn ich den simulavr mit der option -F hex starte, kommt das:
Only the bin file format is currently implemented. Sorry.

Also doch keine hex Dateien, leider

Gruß Sebastian

von OldBug (Gast)


Lesenswert?

Hast Du das denn so [1] gemacht?

[1] http://www.mikrocontroller.net/articles/AVR-Simulation

von Jörg Wunsch (Gast)


Lesenswert?

Ja, sieht so aus, als würde simulavr nur binary files unterstützen.

Was machst du denn mit dem GDB?  Das funktioniert hier OK:

% simulavr -g -d atmega128 &
[2] 90418
Simulating a atmega128 device.

MESSAGE: file decoder.c: line 3872: generating opcode lookup_table
MESSAGE: file main.c: line 413: Simulating clock frequency of 8000000
Hz
Waiting on port 1212 for gdb client to connect...

% avr-gdb -q delaytest.hex
(no debugging symbols found)
(gdb) targ rem :1212
Remote debugging using :1212
Connection opened by host 127.0.0.1, port -3538.
0x00000000 in ?? ()
(gdb) load
Loading section .sec1, size 0x1758 lma 0x0
Start address 0x0, load size 5976
Transfer rate: 47808 bits in <1 sec, 192 bytes/write.

von Sebastian Mazur (Gast)


Lesenswert?

Hallo,
@OldBug
Ja genauso mache ich das, allerdings nicht mit .elf sondern mit .hex,
weil mein Assembler keine .elf oder .out Dateien erzeugt.

@Jörg

Den gdb starte ich genauso, wie Du auch mit dem target und load
allerdings kommt dann die Fehlermeldung mit dem Speicher(sehe meinen
letzten Beitrag).
Vielleicht liegt das an der simulavr Version?
Ich benutze die Originalversion von Debian sid, und zwar 0.1.2.2, hast
Du eine andere? Soll ich eventuell was anderes ziehen und selber
Kompilieren?
Bei meinen C Programmen funktioniert der gdb auch ohne Probleme, wird
dann wohl an simulavr liegen, oder?

Gruß Sebastian

von Alex (Gast)


Lesenswert?

Hallo,

habe exakt dasselbe Problem mit simulavr 0.1.2.2-1. Wenn sich hier
irgend eine Lösung ergeben haben sollte dann wäre ich für eine Info
sehr dankbar :-)

von Armin Voetter (Gast)


Lesenswert?

Ich habs jetzt mit tavrasm und anderen Formaten (generic hex, obj, bin)
versucht, das Ergebnis ist das selbe. Hab auch einen anderen Simulator
(AVR-sim von der Uni Magdeburg) probiert, dort gibts überhaupt einen
Segfault.

avrora ist ein anderer Simulator, damit hab ich aber noch gar nix
zuwegegebracht

Hmmm, bleibt mir "wieder" nur die Windoofs Software?

Grüße aus Wien
Armin

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


Lesenswert?

Hast du mal simulavrxx probiert?  Ich selbst noch nicht, aber es
halt allgemein gute Kritiken.

von Johan Dams (Gast)


Lesenswert?

Hello.

(My German writing is bad, so thats why in English, sorry)

You should try an older version of gdb with simulavr. For me, 6.0.0
works fine but 6.3 and 6.2 do not work.
Also the 'info io_registers' works with older versions, but not with
newer ones.


Hope this helps, even though this thread is already 2 months old.

Best regards,
Johan

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


Lesenswert?

> You should try an older version of gdb with simulavr. For me, 6.0.0
> works fine but 6.3 and 6.2 do not work.

I don't have any trouble with GDB 6.3.

> Also the 'info io_registers' works with older versions, but not
with
> newer ones.

Patch can be found here:

http://www.freebsd.org/cgi/cvsweb.cgi/~checkout~/ports/devel/avr-gdb/files/patch-gdb%3a%3aremote.c?rev=HEAD&content-type=text/plain

I'm afraid I forgot to file that as a bug report to GDB so far.

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


Lesenswert?

> I don't have any trouble with GDB 6.3.

Ermmm, mind that second patch there in my FreeBSD port as well:

http://www.freebsd.org/cgi/cvsweb.cgi/~checkout~/ports/devel/avr-gdb/files/patch-gdb%3a%3asymfile.c?rev=HEAD&content-type=text/plain

von Johan Dams (Gast)


Lesenswert?

Hello.

I applied the patch to gdb6.3, and the 'info io_registers' is
working.
The debugging seems to work, with registers and local variables
changing values.
However, I still get a mamory access error when loading the file:

(gdb) target remote :1212
Remote debugging using :1212
0x00000000 in __vectors ()
(gdb) load
Loading section .text, size 0x7a lma 0x0
Memory access error while loading section .text.
(gdb)

Any ideas?


Best regads,
Johan

von Johan Dams (Gast)


Lesenswert?

GDB 6.2 does seem to work fine...


Best regards,
Johan

von Johan Dams (Gast)


Lesenswert?

Hello.

I've been trying simulavr and simulavrxx in conjunction with avr-gdb
over the past couple of days.
The results with the older simulavr have been really nice. However I
don't seem to find a way to use input ports on it (PINA, etc..).

Simulavrxx seems to be better when it comes to attaching external
virtual hardware, but I miss the simulavr-disp tool, and the 'info
io_registers' GDB command on this one.

Am I missing something here? Should the 'info io_registers' work with
simulavrxx?
How do I connect something (e.g. switch) to an input on the old
simulavr?

Maybe someone here has experience with this and could help me.


Best regards,
Johan

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


Lesenswert?

Quite possible that simulavrxx doesn't handle the `info io_register'
command; this command indeed needs to be handled by the backend GDB
connects to.  I only know that AVaRICE also doesn't handle the IO
registers for all target MCUs.

Remember though that you can still query a single IO register quite
fine by dereferencing its address explicitly.  So

(gdb) x/32x 0x800020

will display the values of the first 32 IO registers, and

(gdb) p/x *(char *)0x800039

will display the value of PINA, for example.  Remember also that you
can use GDB-internal variables, so e.g. the above could also be
written by

(gdb) set $pina=(char *)0x800039
...
(gdb) p/x *$pina

or also

(gdb) display *$pina

so it will display you the contents of PINA each time the debugger
stops.

It seems simulavrxx might need a helping hand in some areas...  It's
probably best to discuss things like that one with the authors on
their mailing list:

http://lists.nongnu.org/mailman/listinfo/simulavr-devel

von Johan Dams (Gast)


Lesenswert?

Hello.

Thanks for the information. I have subscribed to their mailinglist,
maybe I can help them out with some stuff.

By the way, in case anyone is interested, the reason why I could not
read any data into a port (e.g., data = PINB) is because the external
device hooks to ports have been disabled in the emulavr main.c
Re-enabeling these inputs makes this work again.


Best regards,
Johan

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.