Forum: Compiler & IDEs simulavr und avr-gdb


von Andreas K. (lowrider)


Lesenswert?

Hallo MCF's (Micro Controller Fans),

habe da ein dickes Problem bei meiner Entwicklungsumgebung.

Ich arbeite unter SuSE 11.3.

Ich habe mir jetzt Eclipse installiert (funzt super).

Zum Debuggen, was bei AVR ein echtes Thema zu sein scheint, habe ich mir 
AVR-GDB (Version 6.8) und simulavr (Version 0.1.2.6-4.3) aus den 
SuSE-Repos installiert.

Leider funktioniert das Zusammenspiel der Programme nicht. Ich habe 
danach schon gegoogelt und auch hier im Forum schon einiges gefunden, 
was aber nicht zu einer Lösung geführt hat. was passiert:

Ich rufe simulavr mit folgendem Kommando auf:
1
simulavr -g -p 1212 -P simulavr-disp -d atmega8

Dann starte ich den GDB mit
1
avr-gdb

Bedient wird der GDB mit folgenden Befehlzeilen:
1
GNU gdb 6.8
2
Copyright (C) 2008 Free Software Foundation, Inc.
3
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
4
This is free software: you are free to change and redistribute it.
5
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
6
and "show warranty" for details.
7
This GDB was configured as "--host=i686-pc-linux-gnu --target=avr".
8
(gdb) file /home/andreas/workspace/SinusSynchron/Debug/SinusSynchron.elf
9
Reading symbols from /home/andreas/workspace/SinusSynchron/Debug/SinusSynchron.elf...done.
10
(gdb) target remote :1212
11
Remote debugging using :1212
12
0x00000000 in __vectors ()
13
(gdb) load
14
Loading section .text, size 0x15d2 lma 0x0
15
Loading section .data, size 0x2 lma 0x15d2
16
Start address 0x0, load size 5588
17
Transfer rate: 227 KB/sec, 31 bytes/write.
18
(gdb) break main
19
Breakpoint 1 at 0x534: file ../Source/SinusSynchron.c, line 152.
20
(gdb) continue
21
Continuing.
22
Remote connection closed
23
(gdb)

Nach dem target-Befehl reagiert simulavr wie folgt:
1
Connection opened by host 127.0.0.1, port -27779

Was mich schon erst einmal wundert, weil der Port nicht stimmt 
(confused?). Scheint aber alles zu funktionieren, da die Verbindung 
besteht. Erst nach dem continue-Befehl bricht simulavr mit folgender 
Meldung ab:
1
storage.c:97: ERROR: address out of bounds: 0x4ff

Und nichts geht mehr.

Ich würde auch gerne meinen richtigen atmega simulieren (Atmega168), der 
wird aber von dieser simulavr-Version nicht unterstützt. Ich habe auch 
versucht, mir eine aktuelle Version herunterzuladen (0.8..) konnte 
dieser aber nicht compilieren, da hier autoconf und automake irgendwie 
nicht richtig funktionieren und eine configure ist dort nicht, wie in 
der README erwähnt, enthalten.
Ich weiß, das ist jetzt ein bischen viel auf einmal. Kann mir trotzdem 
jemand helfen??

Danke, Andreas

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


Lesenswert?

Andreas Klafft schrieb:

>
1
Connection opened by host 127.0.0.1, port -27779
>
> Was mich schon erst einmal wundert, weil der Port nicht stimmt
> (confused?).

Das passt schon.  Das ist der Client-Port, von dem aus die
Verbindung geöffnet worden ist.  Eine vorzeichenbehaftete
Angabe ist natürlich Humbug, korrekt wäre also 37757.  Client-
Ports wählt sich der Client selbst aus, typischerweise aus dem
Bereich 30000...40000 (kann je nach Betriebssystem verschieden
sein).

>
1
storage.c:97: ERROR: address out of bounds: 0x4ff

Die Stack-Initialisierung deines ATmega168 versucht auf Speicher
zuzugreifen, den es im simulierten ATmega8 nicht gibt.

Du musst dir wohl oder übel die Mühe machen, deinen Code für einen
ATmega8 zu compilieren, damit du ihn damit simuliert bekommst.

Die aktuelle Version von simulavr ist übrigens eine komplett andere
Codebasis als die, die du hier benutzt.

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.