www.mikrocontroller.net

Forum: GCC AVR Studio 5: Variablen in I/O Bereich abgelegt


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Nobuo T. (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hi,

Ich habe das AVR Studio 5.0.1163 installiert und will ein C-Programm für 
einen ATMega324A erstellen.
Jedoch wollte der Code nicht so recht laufen. Beim Debuggen fiel auf, 
dass Variablen lustig Werte wechselten oder direkt nach einer Zeile mit 
Zuweisung den zugewiesenen Wert nicht annahmen.
Ein Blick auf die Variablenadressen und den disassemblierten Code 
zeigte, dass alle Variablen ab Adresse 0x0060 abgelegt wurden. Laut 
Datasheet liegt dort jedoch der Bereich der erweiterten I/O-Register. 
Erklärt so weit die Probleme.
Wie mache ich dem AVR Studio, bzw. GCC nun aber klar, dass er die 
Variablen gefälligst in den SRAM packen soll? Andere Ideen?

Das betreffende Projekt war ursprünglich mit AVR Studio 4 erstellt (lief 
dort ohne Probleme) und wurde im AVR Studio 5 importiert. Ich habe den 
korrekten µC eingestellt...

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Könnte ein Bug in der Toolchain sein, aber auch im AVR Studio.

Kannst du die Kommandozeilen posten, mit denen das compiliert wird?
Am besten, noch ein -v mit einfügen und dann die Ausgaben des
Compilers posten.

Autor: Nobuo T. (Gast)
Datum:
Angehängte Dateien:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hm, mal sehen... Die Kommandozeilen sind:
avr-gcc -funsigned-char -funsigned-bitfields -DF_CPU=8000000UL  -Os -fpack-struct -fshort-enums -Wall -c -gdwarf-2 -std=gnu99 -v  -mmcu=atmega324a 

avr-gcc -v  -mmcu=atmega324a -Wl,-section-start=RAM=0x800100
Wie man sieht, habe ich auch schon versucht, mit memory sections zu 
experimentieren. Hat augenscheinlich aber genau gar nichts bewirkt.

Die Ausgabe beim Compilieren habe ich angehängt.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Da ist in der Toolchain was versaut.  Bei dir:
... collect2.exe -m avr5 -o LED_ctrl.elf ...

Bei mir:
... collect2 -m avr5 -Tdata 0x800100 -o foo.elf ...

Das -Tdata 0x800100 fehlt bei deiner Toolchain.

> Wie man sieht, habe ich auch schon versucht, mit memory sections zu
> experimentieren. Hat augenscheinlich aber genau gar nichts bewirkt.

Ja, weil die section nicht "RAM" heißt, sondern ".data".  Damit
dürfte es auch bei dir gehen.

Schreib' das mal an support -ät- atmel -punkt- com.  Vielleicht
haben sie ja eine neuere Version der Toolchain für dich, die diesen
Bug schon behoben hat.

Autor: Nobuo T. (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Vielen Dank. Werde ich mal durchprobieren und ggF. an Atmel schreiben.

Autor: Franz R. (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hi,

ich habe das gleiche Problem. Wie wurde es denn nun gelöst? Hast du von 
Atmel eine Antwort erhalten?

Autor: Mobifu (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo Helfer,
Ich habe eine Double Variable und ein Array mit der laenge 2
deklariert. Beim debuggen viel auf , dass die Beiden sich eine 
speicheradresse teilen.
Hat dieses Problem noch jemand?
Danke Mobifu , Avr Studio 5

Autor: Mobifu (Gast)
Datum:
Angehängte Dateien:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Kleiner screenshot:
Die beiden Werte sind unten highlighted.
Gruss Mobifu

Autor: Stefan Ernst (sternst)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Weil du außerhalb des Arrays zugreifst. Das Array hat nur zwei Member, 
nämlich einheit[0] und einheit[1]. einheit[2] existiert gar nicht, seine 
Adresse liegt hinter dem Array, daher der Konflikt mit einer anderen 
Variablen.

PS: Was hat das in diesem alten Thread zu suchen?

Autor: Mobifu (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Danke für den schnellen Tip.
Mobifu

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net