Problem bei Self-Programming und Umstieg von ATtiny84 auf ATmega168

#3563928
Lesenswert?

Hallo!

Wie im Betreff schon erwähnt, habe ich ein Problem mit dem 
Self-Programming beim Umstieg von ATtiny84 auf ATmega168.
Auf dem ATtiny84 habe ich ein C-Programm, welches sich im Flash einen 
Speicherbereich an fester Hardware-Adresse definiert hat, in dem es 
Daten speichern und daraus lesen kann. Dazu konnte ich ja die 
Self-Programming-Funktion nutzen.
Nun muss ich auf den ATmega168 umsteigen und dort verhält es sich mit 
dem Self-Programming so, dass nur Code welcher in der Boot Flash Section 
steht, Schreibzugriff auf das Flash bekommt. Also habe ich mir per 
Linker-Definition einen Bereich in der Boot Section definiert und den 
Code-Teil meines Programms, der Schreibzugriff braucht, dorthin 
verschoben.
Das Problem ist, dass bei der Ausführung des Programms nun an der Stelle 
wo in den 'ausgelagerten' Code gesprungen wird, irgend etwas mir bisher 
unbekanntes passiert. Als Resultat zeigt sich es jedenfalls so, dass 
nach dem Ausführen des Codes im Boot Sector und dem Rücksprung ins 
reguläre Programm mein CSTACK und RSTACK überlaufen und Variablen des 
Programms falsche Werte haben. Das Programm verhält sich absolut 
fehlerhaft.

Hat jemand schonmal etwas Ähnliches gehabt, oder weiss wo mein Fehler 
liegen könnte?

Gruß
Florian
#3564705
Lesenswert?

Florian K. schrieb:
> Ah, ein Komiker

Na ja, du hast schließlich angefangen. Es gibt zwar keine dumme Fragen, 
aber du warst nah drann. Solche Fragen ohne Code sind sinnlos.

Gleich danach kommt allerdings, zur Frage den falschen Code zu zeigen. 
Ich wette, daß das der Code vom Tiny ist, und ich würde mich wundern, 
wenn der für einen Mega168 fehlerfrei compiliert. CTPB kennt der Mega168 
nicht. An der Stelle würde ich dann mal ansetzen.

Oliver
#3564731
Lesenswert?

Oliver S. schrieb:
> Ich wette, daß das der Code vom Tiny ist, und ich würde mich wundern,
> wenn der für einen Mega168 fehlerfrei compiliert. CTPB kennt der Mega168
> nicht. An der Stelle würde ich dann mal ansetzen.

Der Code ist vom tiny, aber ich habe auch schon per define CTPB in 
RWWSRE geändert. Als Entwicklungsungebung nutze ich IAR embedded 
workbench und die inkludiert auch alles Nötige, um die 
Abwärtskompatibilität zu gewährleisten (ua wird SPMEN zu SELFPRGEN 
definiert). Der Code lässt sich somit sehr wohl fehlerfrei kompilieren.
#3564770
Lesenswert?

Florian K. schrieb:
> Der Code lässt sich somit sehr wohl fehlerfrei kompilieren.

Na ja, prima. Der gezeigte Code aber nicht.

Worauf ich allerdings hinaus wollte, ist, das das Bit von Atmel nicht 
umbenannnt wurde, sondern daß das Bit in dem Register beim Mega was ganz 
anderes macht als beim Tiny, und daß daher auch im Programm reines 
umbenennen eventuell nicht ausreicht. RTFM.

Das die unterschiedlich großen pagesizes in der Partitionstabelle 
berücksichtig wurde, setzte ich jetzt einfach mal voraus.

Oliver

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