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...
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.
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.
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.
Vielen Dank. Werde ich mal durchprobieren und ggF. an Atmel schreiben.
Hi, ich habe das gleiche Problem. Wie wurde es denn nun gelöst? Hast du von Atmel eine Antwort erhalten?
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
Kleiner screenshot: Die beiden Werte sind unten highlighted. Gruss Mobifu
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
