Forum: Compiler & IDEs umstieg von ATmega162 auf ATmega64


von Martin Raffelsieper (Gast)


Lesenswert?

Hallo, wer kann mir denn mal auf die Sprünge helfen:

ich habe ein Projekt erfolgreich mit GCC und einem ATmega162
abgeschlossen.

jetzt möchte ich auf ATmega64 umsteigen. Dazu ändere ich doch lediglich
den Compiler/linkeraufruf auf die neue CPU um, oder???


vorher (ATmega162):
avr-gcc -g -Wall -O2 -mmcu=atmega162 -c -o ..\O\main.o main.c

avr-cc ..\O\main.o -Wl,-Map=..\M\reader.map, -o ..\M\reader.elf
--cref -mmcu=atmega162

avr-objcopy --debugging -O coff-avr --change-section-address
.data-0x800000 --change-section-address .bss-0x800000
--change-section-address .noinit-0x800000 --change-section-address
.eeprom-0x810000 ..\M\reader.elf reader.cof




Nachher (ATmega64):
avr-gcc -g -Wall -O2 -mmcu=atmega64 -c -o ..\O\main.o main.c

avr-cc ..\O\main.o -Wl,-Map=..\M\reader.map, -o ..\M\reader.elf
--cref -mmcu=atmega64

avr-objcopy --debugging -O coff-avr --change-section-address
.data-0x800000 --change-section-address .bss-0x800000
--change-section-address .noinit-0x800000 --change-section-address
.eeprom-0x810000 ..\M\reader.elf reader.cof



Der Effekt ist jetzt der, dass alles fehlerfrei übersetzt wird, alles
schön ins studio geladen wird, ich auch schön überall durchsteppen
kann.

ABER:::
die CPU kommt nicht mehr aus Unterprogrammen zurück, der Ret-Befehl
springt stets nach 0x0000


WAS KANN DAS SEIN???  muss ich bei der Konvertierung nach COFF noch was
ändern?

Gruß Martin

von Martin Raffelsieper (Gast)


Lesenswert?

Nachtrag:

in der Spec lese ich, dass der ATmega64 zwei Memory Configurations
"A" und "B" kann.

in "A" geht der interne SRam von 0x0100..0x10FF
in "B" geht der interne SRam von 0x0060..0x0FFF

laut Studio wird mein SP in der Startup-Routine auf 10FF initialisiert
und wandert mit jedem UP-Aufruf herunter auf 10FD, 10FB, 10F9 etc. Das
heiss dass der Compiler von der "B"-Konfiguration ausgeht.

wenn ich aber im Studio von Hand die SRAM-Zellen ändern möchte, so
gelingt mir das nur im Bereich bis 0FFF, nicht aber im Bereich
1000...10FF, d.h. das riecht wiederum nach Configuration "A".

was mache ich falsch?

von Martin Raffelsieper (Gast)


Lesenswert?

so nun hab ichs sogar selber gefunden:

aus irgendeinem Grunde war die Fuse

"ATmega 103 Compatibility mode" gesetzt.


Fuse gelöscht - Speicher geht bis 10FF SW läuft - Compiler ist
rehabilitiert - hätte ich auch nicht anders erwartet!


Vielen dank

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.