AVR Studio 5: Variablen in I/O Bereich abgelegt

Gast #2343264
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...
Gast #2343302
Hm, mal sehen... Die Kommandozeilen sind:
1
avr-gcc -funsigned-char -funsigned-bitfields -DF_CPU=8000000UL  -Os -fpack-struct -fshort-enums -Wall -c -gdwarf-2 -std=gnu99 -v  -mmcu=atmega324a 
2

3
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.
Angehängte Dateien:
Moderator Persönliche Seite #2343617
Da ist in der Toolchain was versaut.  Bei dir:
1
... collect2.exe -m avr5 -o LED_ctrl.elf ...

Bei mir:
1
... 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.
Gast #2620603
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
#2620679
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?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.