Problem bei Self-Programming und Umstieg von ATtiny84 auf ATmega168

OP #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
OP #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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.