Bootloader Mega256

OP #1381004
Lesenswert?

Hallo zusammen,
ich habe einen Bootloader, den ich bisher mit verschiedenen Atmegas 
genutzt habe (Atmega32,64,644). Geschrieben ist er mit AVRGCC 20070525.

Ich habe jetzt ein neues Projekt mit dem Mega2561. Auch darauf 
funktioniert der Bootloader mit ein paar kleinen Anpassungen 
(Adressgrößen auf 32 Bit geändert).
Jetzt ist mein Projekt aber das erste mal größer als 32KB geworden - und 
plötzlich läuft nichts mehr. Ich habe den Inhalt des Atmels mal 
ausgelesen und festgestellt, daß alles mit Wortadressen > 0x4000 bei der 
Wortadresse 0x1C000 erscheint. Sprich alles was ab Adresse 32768 im 
Speicher liegt wird auf eine viel höhere Adresse gemappt.

Ich habe auch schon geprüft, daß die richtigen SPM Routinen verwendet 
werden (Extended Versionen). Auf einem Mega64 ist es kein Problem 
Adressen über 32768 zu schreiben.

Ist eigentlich ziemlich unlogisch - normal sollten die Probleme wenn 
erst über 65536 auftreten ...

Hat irgendjemand eine Idee woran das liegen könnte ?

Gruß, Marcus
OP #1381367
Lesenswert?

Ich denke ich habe den Fehler gefunden ...

Ich berechne die Flash Adresse aus mehreren unsigned char und Int 
Werten. Erst das fertige Ergebnis wird in den unsigned long geschrieben.

Daher rechnet der Compiler natürlich brav (und definitionsgemäß) erst in 
Int (16 Bit signed) und speichert dann erst das (natürlich falsche) 
Ergebnis im unsigned long.

Blöder Fehler ...

Gruß, Marcus
OP #1384698
Lesenswert?

Spezialausführung mit mit 128KB Flash mit Adresse < 0 und 128 > 0 :-)

Spaß beiseite: Die eigentliche Adresse ist ein unsigned long. Da die 
Flash Adressen Byteadressen sind ist das ab dem Mega128 nötig.

Nur innerhalb der Berechnung (in einem Ausdruck) hat der Compiler 
Defaultmäßig zunächst int genutzt. Nachdem ich es einmal gefunden hatte, 
ließ es sich leicht wegcasten.

Gruß, Marcus

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren